답변:
찾고자하는 스트링을 조작 할 라인 선택기로 사용하십시오.
sed '/ipsum/s/#//g'
/ipsum/
"ipsum"을 포함하는 행을 선택하고이 행에서만 뒤에 오는 명령이 실행됩니다. 중괄호를 사용하여 더 많은 명령을 실행할 수 있습니다
/ipsum/{s/#//g;s/@/-at-/g;}
sed -i '/ipsum/s/#[[:space:]]*//'
하여 바로 뒤에 공백과 탭을 제거 할 수 있습니다 #
. (4) #
행에서 첫 번째 공백이 아닌 문자 인지 확인하는 것이 좋습니다. 현재 명령은 #
행에서를 삭제합니다 prompt "Enter # of ipsums:"
.
sed -i '/ipsum/s/^#[[:space:]]*//'
습니까? ( ^
줄의 $
끝을 의미하는 줄의 시작을 나타냄 )-적어도 말끔하게…
^
는 있지만 잘못되었습니다. 필자는 종종 코드 #
바로 앞에 코드를 삽입하여 들여 쓰기 된 코드를 주석 처리 하므로 #
들여 쓰기됩니다. 내가 그런 유일한 사람인지 의심합니다.
^
& 사이에 공백이 있는지 확인하고 싶을 #
것이므로 다음과 같습니다 /ipsum/{/^[[:space:]]*#/s/#[[:space:]]*//}
.. 그럼에도 불구하고, 위치에 따라 #
여전히 문제가 발생할 수 있습니다 (예 : 공백 들여 쓰기 / 분리를 사용하는 언어).
$ cat input.txt
# lorem ipsum blah variable
# lorem ipsum blat variable
# lorem ipsum blow variable
# lorem ipsum blip variable
# lorem ipsum blue variable
그때:
$ sed 's|# \(.*blue.*\)|\1|' input.txt
제공합니다 :
# lorem ipsum blah variable
# lorem ipsum blat variable
# lorem ipsum blow variable
# lorem ipsum blip variable
lorem ipsum blue variable
다음과 같이 작동합니다.
는 s
이야기 sed
는 정규 표현식 발견 무엇으로 대체해야한다고.
패턴은 # \(.*blue.*\)
다음과 같이 분류됩니다. 해시와 공백을 찾습니다. 대괄호 ( \(
)는 그룹화를 시작합니다. 전후에 무엇인가 .*blue.*
있는 단어 blue
입니다. 다음 대괄호 ( \)
)는 그룹을 닫습니다.
대체는 \1
첫 번째 그룹화 브래킷의 내용에 대한 역 참조입니다.
Ex 모드에서 Vim을 사용할 수 있습니다 :
ex -sc '/ipsum/s/#//|x' file
s
대용품
x
저장하고 닫습니다
's/#//g'
제거 모든#
라인의 문자를. 원하는 것이 아니라면g
( "글로벌"을 의미) 제거하십시오 . (2) 파일을 제 위치에서 편집하려면 (질문에서 요구 한대로)을 사용하십시오sed -i
.