sed にて複数行にまたがる文字列を置換

文字列を置換する場面は多数あると思いますが、複数行にまたがった文字列の置換をする場面には遭遇することがなかった。そして sed で簡単に処理できた。sed すごい!

実際の複数行の置換例

具体的には style.css に含まれている複数行のセレクターを置換したい

置換元

.RecastAppInput textarea {
min-height: 100px;
}

置換後

.RecastAppInput textarea {
min-height: auto;
}

置換方法

以下の sed コマンドを実行すれば OK。複数行を対象にした正規表現を命令して処理することで sed が処理してくれるという話。

sed -e "N;s/\(\.RecastAppInput textarea {\n  min-height:\) 100px/\1 auto/" style.css >style2.css

テキストエディターでファイルを開き、検索&置換をしなくても処理できました。

特にターミナルでリモート先のファイルを置換する時などは重宝しますね。

ちなみにコマンドを実行した環境は Linux です。

sed 引数

さて、この sed 引数のポイントは以下の通り。

sed -eN;s/\(\.RecastAppInput textarea {\n  min-height:\) 100px/\1 auto/” style.css >style2.css

引数説明
-e正規表現
N;複数行にまたがって処理
\(正規表現\)グループ
\.文字列としてのピリオド (.)
\n改行文字
(空白)スペース
\1グループの1番目にマッチした文字列

最後に注意ですが、上記のコマンドをこのブログからコピペした場合うまく動作しない場合があります。Wordpress が二重引用符を別の文字に置き換えて表示しているケースがあるので、もしエラーになった場合には二重引用符をキーボードから入力しなおして実行してみると解決すると思います。

コメントを残す

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