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

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'
チンコ

 

Pocket

Written by blacknon

インフラエンジニア(…のつもり)。 仕事で使うならクライアントはWindowsよりはUNIXの方が好き。 大体いつも眠い。

Leave a Comment

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

*