Sedを使用して単語全体を検索および置換するにはどうすればよいですか?
やること
_sed -i 's/[oldtext]/[newtext]/g' <file>
_
また、_[oldtext]
_の部分一致も置き換えますが、これは望ましくありません。
正規表現の\ bは、Wordの境界(つまり、最初のWord文字と非Word文字の間の位置)に一致します。
$ echo "bar embarassment" | sed "s/\bbar\b/no bar/g"
no bar embarassment
Mac OS Xでは、これらの正規表現構文のnotherは、単語全体を一致させるためにsed内で機能します
\bmyWord\b
\<myWord\>
thisい構文を使用する必要があります。
/[[:<:]]myWord[[:>:]]/
したがって、たとえば、単語全体に対してのみmintをmintyに置き換えるには:
sed "s/[[:<:]]mint[[:>:]]/minty/g"
ソース: re_format man page
つかいます \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
シェルコマンド:
echo "bar embarassment" | sed "s/\bbar\b/no bar/g"
または:
echo "bar embarassment" | sed "s/\<bar\>/no bar/g"
ただし、vimを使用している場合は、後者のみを使用できます。
:% s/\<old\>/new/g