sedで特定のパターンで指定した範囲の行に対して改行を含む置換を行う
Pocket

ふと、sedで特定のパターンで指定した範囲の行に対して、改行を含んだ置換を実施する場合ってどうすりゃ良いんだっけかなと思ったので、備忘で残しておく。
結論としては、以下のように「/START/,/END/」で範囲を指定してやり、その範囲に対してNコマンドでラインを読み込んでやってから置換をしてやればいいようだ。

sed '/START/,/END/{N;s/BEFORE/AFTER/}'
Sponsored Links

[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

 

Pocket

Written by blacknon

インフラ系のSE。一時期はプログラマ。 仮想化とオープンソースに興味あり。一日中寝てたい今日このごろ。 スペインとかで働きたいなぁ…(シエスタがあるので)

Leave a Comment

メールアドレスが公開されることはありません。

*