다음 줄에 가 포함된 경우 create_test
파일을 로 바꾸고 싶습니다 . sed를 사용하여 이를 포함하는 전체 파일을 처리하려면 어떻게 해야 합니까?#create_test
psfxxx_16_pi
입력 파일 내용:
create_test -type hard -outer { 1.0000 } { \
psfxxx_16_pi/psfop/deadline_north_re_0 }
create_test -type hard -outer { 0.0000 } { \
psfxxx_16_pi/psfop/deadline_south_re_1 }
결과물 파일:
#create_test -type hard -outer { 1.0000 } { \
psfxxx_16_pi/psfop/deadline_north_re_0 }
#create_test -type hard -outer { 0.0000 } { \
psfxxx_16_pi/psfop/deadline_south_re_1 }
답변1
노력하다
sed '/^create_test/ {N; /psfxxx/ s/^/#/}' file
#create_test -type hard -outer { 1.0000 } { \
psfxxx_16_pi/psfop/deadline_north_re_0 }
#create_test -type hard -outer { 0.0000 } { \
psfxxx_16_pi/psfop/deadline_south_re_1 }
create_test -type hard -outer { 1.0000 } { \
vsfxxx_16_pi/psfop/deadline_north_re_0 }
create_test -type hard -outer { 0.0000 } { \
vsfxxx_16_pi/psfop/deadline_south_re_1 }
"create_test"가 발견되면 다음 줄을 추가하고, 줄에 "psfxxx"가 포함되어 있으면 "#" 접두사가 붙습니다.
답변2
또 다른 sed
방법:
$ sed -zE 's/create_test([^\n]*\n[^\n]*psfxxx_16_pi)/#create_test\1/g' file
#create_test -type hard -outer { 1.0000 } { \
psfxxx_16_pi/psfop/deadline_north_re_0 }
#create_test -type hard -outer { 0.0000 } { \
psfxxx_16_pi/psfop/deadline_south_re_1
답변3
만약 awk가 이렇게 한다면:
awk '/psfxxx_16_pi/{prev = "#" prev} {print prev} {prev = $0} END {print}'
prev
여기에서는 각 줄에 대해 이전 줄( 에 저장됨)을 인쇄하고 $0
다음 반복을 위해 저장합니다 prev
. 줄이 일치하면 끝에 .를 추가하여 마지막 줄을 인쇄합니다 #
.prev