sed를 사용하여 파일의 여러 줄을 주석 처리하는 방법

sed를 사용하여 파일의 여러 줄을 주석 처리하는 방법

파일에 다음 줄이 있습니다

foo
bar
xxx
yyy
zzz

xxx, yyy, zzz 행을 주석 처리해야 합니다. 그래서 나는 달린다다음 명령:

sed -e '/xxx/ s/^#*/#/' -i file
sed -e '/yyy/ s/^#*/#/' -i file
sed -e '/zzz/ s/^#*/#/' -i file

나가

foo
bar
#xxx
#yyy
#zzz

루프에서 이 작업을 어떻게 수행할 수 있습니까(관심 있는 모든 줄에 주석이 달렸는지 확인하고, 그렇지 않은 경우 주석을 달아주세요)?

감사해요

PD:이 명령줄번호를 알면 도움이 되지만, 다를 수도 있기 때문에 잘 모르겠습니다.

sed -e '2s/^/#/' -e '5s/^/#/' -e '7s/^/#/'  file

PD: 각 줄이 정규 표현식이기 때문에 EOF도 사용할 수 없습니다.

답변1

다음 샘플 데이터를 사용하십시오 file.

foo
bar
xxx
yyy
zzz
foo
bar
#xxx
#yyy
#zzz

sed다음을 포함 하는 -E확장 정규식을 사용하세요.

$ sed -E 's/^(xxx|yyy|zzz)$/#&/' file
foo
bar
#xxx
#yyy
#zzz
foo
bar
#xxx
#yyy
#zzz

그리고 awk:

$ awk '/^(xxx|yyy|zzz)$/ { $0 = "#" $0 }; 1' file
foo
bar
#xxx
#yyy
#zzz
foo
bar
#xxx
#yyy
#zzz

사용 표준 sed:

$ sed -e '/^xxx$/bc' -e '/^yyy$/bc' -e '/^zzz$/bc' -e b -e ':c' -e 's/./#&/' file
foo
bar
#xxx
#yyy
#zzz
foo
bar
#xxx
#yyy
#zzz

답변2

다음 예제 텍스트가 주어졌을 때:

foo
bar
xxx
yyy
zzz
foo
bar
#xxx
#yyy
#zzz

다음 명령을 사용할 수 있습니다.

$ sed 's/^\(xxx\|yyy\|zzz\)$/#\1/' file
foo
bar
#xxx
#yyy
#zzz
foo
bar
#xxx
#yyy
#zzz

  • ^[^#]*로 시작하지 않는 행을 구문 분석합니다 #.
  • \(xxx\|yyy\|zzz\)검색 xxx하거나 캡처하고 패턴을 교체 yyy하고 캡처합니다 .zzz##\1

관련 정보