ふと、sedで特定のパターンで指定した範囲の行に対して、改行を含んだ置換を実施する場合ってどうすりゃ良いんだっけかなと思ったので、備忘で残しておく。
結論としては、以下のように「/START/
,/END/
」で範囲を指定してやり、その範囲に対してNコマンドでラインを読み込んでやってから置換をしてやればいいようだ。
sed '/START/,/END/{N;s/BEFORE/AFTER/}'
[root@BS-PUB-CENT7-01 ~]# cat test1.txt
AAA
BBB
CCC
DDD
EEE
FFF
GGG
[root@BS-PUB-CENT7-01 ~]# sed '/BBB/,/DDD/{N;s/^BBB\nCCC/222\n333/}' test1.txt
AAA
222
333
DDD
EEE
FFF
GGG
[root@BS-PUB-CENT7-01 ~]# sed '/BBB/,/DDD/{N;s/^BBB\nCCC/222\n333\n444/}' test1.txt
AAA
222
333
444
DDD
EEE
FFF
GGG