次の行にが含まれている場合は、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