sedで置換する際に最短一致で指定をする

sedで置換条件に最短一致を指定したい事があったので、備忘で残しておく。
残念ながらsedでは最長一致が基本で、最短一致の指定方法は用意されていない。このため、以下のように「^」と組み合わせて開始文字列を指定して正規表現を記述してやることで、最短一致を指定する。

echo "abc<b>123</b>def<b>456</b>ghi" | sed 's|<[^<]*>||g' # 例1) <> で囲んでる範囲だけ対象にする
echo "abc<b>123</b>def<b>456</b>ghi" | sed 's|<b[^<]*</b>||g' # 例2) <b>~</b>で囲んでる範囲だけ対象にする
blacknon@BS-PUB-UBUNTU-01:~$ echo "abc<b>123</b>def<b>456</b>ghi" | sed 's|<.*>||g' # 例) そのままだと最長一致
abcghi
blacknon@BS-PUB-UBUNTU-01:~$ echo "abc<b>123</b>def<b>456</b>ghi" | sed 's|<[^<]*>||g' # 例1) &lt;&gt; で囲んでる範囲だけ対象にする
abc123def456ghi
blacknon@BS-PUB-UBUNTU-01:~$ echo "abc<b>123</b>def<b>456</b>ghi" | sed 's|<b[^<]*</b>||g' # 例2) <b>~</b>で囲んでる範囲だけ対象にする
abcdefghi
Sponsored Links

sedの代わりにPerlを使う場合、最短一致は対応しているので、以下のように正規表現を記述してやればいい。

echo "チン<small>す</small>コ<small>う</small>" | perl -pe 's|<small.*?/small>||g'
blacknon@BS-PUB-UBUNTU-01:~$ echo "チン" | perl -pe 's|<small.*?/small>||g'
チンコ

 


Written by blacknon

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

Leave a Comment

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

*