다음과 같은 줄이 포함된 파일에서:
# lorem ipsum blah variable
#
특정 문자열이 포함된 같은 줄에서 문자를 제자리에서 제거(주석) 하고 싶습니다 . sed
이것에 어떤 이점이 있습니까?
이 조건을 작동시키려고 노력 중입니다. 이 작업을 수행하는 "서투른" 방법이 있습니다. awk
or를 사용하여 일치하는 줄 번호를 찾은 sed
다음 해당 번호를 별도의 sed
명령에 사용할 수 있지만 이 작업을 수행하는 더 좋은 방법이 있다고 확신합니다.
답변1
작업하려는 행에 대한 선택기로 찾고 있는 문자열을 사용하십시오.
sed '/ipsum/s/#//g'
/ipsum/
"ipsum"이 포함된 줄을 선택하고 이 줄에서만 다음 명령을 실행합니다. 중괄호를 사용하여 더 많은 명령을 실행할 수 있습니다
/ipsum/{s/#//g;s/@/-at-/g;}
답변2
$ 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
첫 번째 그룹화 괄호의 내용에 대한 역참조입니다.
답변3
POSIX 도구를 사용할 수 있습니다 ex
.
ex a.txt <<eof
/Sunday/ sub/Sun//
xit
eof
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/ex.html
답변4
다음과 같이 이 작업을 수행할 수 있습니다.
sed '/ipsum/s/^# //g'
주석이 포함된 모든 줄을 일치시키고 ipsum
줄 시작 부분에서 주석을 제거합니다. ^
줄의 시작 부분과 일치하고 $
줄의 끝 부분과 일치합니다. 명령의 나머지 부분은 sed 's/find/replace/g'
파일을 편집하기 위해 호출할 수 있는 구문을 사용합니다 sed -i '/ipsum/s/^# //g' file
.
다음과 같이 이 프로세스를 되돌릴 수 있습니다.
sed '/ipsum/s/^/# /g'
포함된 각 줄의 시작 부분에 설명이 추가됩니다 ipsum
.