sedのお勉強2 特定文字列に一致した次の行を操作するスクリプト

前回の内容を応用して、特定文字列に一致した次の行を操作するスクリプトを書いてみる。

昨日と同じくこんなテストファイ

[root@testsv sedtest]# cat sedtest.txt
1111
2222
3333
4444
5555
6666
7777
8888
9999
0000

nを使って2222の行の次の行が3333ならば表示する。

[root@testsv sedtest]# sed -n '/2222/{n;/3333/p}' sedtest.txt
3333

逆に2222の行の次の行が3333ならば削除する。

[root@testsv sedtest]# sed  '/2222/{n;/3333/d}' sedtest.txt
1111
2222
4444
5555
6666
7777
8888
9999
0000

2222の行の次の行が3333ならば削除する&&削除した次の行が4444ならば「tikan」という文字列に置換する。

[root@testsv sedtest]# sed -e '/2222/{n;/3333/d}' -e 's/4444/tikan/' sedtest.txt
1111
2222
tikan
5555
6666
7777
8888
9999
0000

2222の行の次の行が3333ならば、「tikan」という文字列に置換する。

[root@testsv sedtest]# sed -e '/2222/{n;s/3333/tikan/}' sedtest.txt
1111
2222
tikan
4444
5555
6666
7777
8888
9999
0000

{}の中は;で区切ってどんどん繋ぐことができる。

[root@testsv sedtest]# sed -e '/2222/{n;s/3333/tikan/;n;s/4444/tikan2/}' sedtest.txt
1111
2222
tikan
tikan2
5555
6666
7777
8888
9999
0000

次はホールドスペースのお勉強かな〜。