파일에 다음 줄이 있습니다
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