134

sed を使用して単語全体を検索して置換するにはどうすればよいですか?

やっている

sed -i 's/[oldtext]/[newtext]/g' <file> 

[oldtext]また、実行したくない部分一致も置き換えます。

4

5 に答える 5

186

正規表現の \b は、単語の境界 (つまり、単語の最初の文字と単語以外の文字の間の位置) に一致します。

$ echo "bar embarassment" | sed "s/\bbar\b/no bar/g"
no bar embarassment
于 2009-06-23T11:41:16.600 に答える
154

Mac OS Xでは、これらの正規表現構文はいずれも、単語全体を照合するためにsed内では機能しません。

  • \bmyWord\b
  • \<myWord\>

今私を聞いて、後で私を信じてください、この醜い構文はあなたが使う必要があるものです:

  • /[[:<:]]myWord[[:>:]]/

したがって、たとえば、単語全体でミントミントに置き換えるには、次のようにします。

  • sed "s/[[:<:]]mint[[:>:]]/minty/g"

出典:re_formatのマニュアルページ

于 2011-04-20T17:27:44.903 に答える
15

\b単語の境界に使用:

sed -i 's/\boldtext\b/newtext/g' <file>
于 2009-06-23T11:42:39.920 に答える
8

私のマシンの 1 つで、" \b" (引用符なし) で単語を区切ることができませんでした。解決策は、\<区切り文字の開始に " "を使用し、区切り\>文字の終了に " " を使用することでした。

Joakim Lundbergの例で説明するには:

$ echo "bar embarassment" | sed "s/\<bar\>/no bar/g"
no bar embarassment
于 2010-03-16T22:44:12.123 に答える