sed を使用して単語全体を検索して置換するにはどうすればよいですか?
やっている
sed -i 's/[oldtext]/[newtext]/g' <file>
[oldtext]
また、実行したくない部分一致も置き換えます。
正規表現の \b は、単語の境界 (つまり、単語の最初の文字と単語以外の文字の間の位置) に一致します。
$ echo "bar embarassment" | sed "s/\bbar\b/no bar/g"
no bar embarassment
Mac OS Xでは、これらの正規表現構文はいずれも、単語全体を照合するためにsed内では機能しません。
\bmyWord\b
\<myWord\>
今私を聞いて、後で私を信じてください、この醜い構文はあなたが使う必要があるものです:
/[[:<:]]myWord[[:>:]]/
したがって、たとえば、単語全体でミントをミントに置き換えるには、次のようにします。
sed "s/[[:<:]]mint[[:>:]]/minty/g"
\b
単語の境界に使用:
sed -i 's/\boldtext\b/newtext/g' <file>
私のマシンの 1 つで、" \b
" (引用符なし) で単語を区切ることができませんでした。解決策は、\<
区切り文字の開始に " "を使用し、区切り\>
文字の終了に " " を使用することでした。
Joakim Lundbergの例で説明するには:
$ echo "bar embarassment" | sed "s/\<bar\>/no bar/g"
no bar embarassment