回答:
正規表現の\ bは単語の境界(つまり、最初の単語文字と非単語文字の間の位置)に一致します。
$ echo "bar embarassment" | sed "s/\bbar\b/no bar/g"
no bar embarassment
\band\b
、その日を救った:)
Mac OS Xでは、これらの正規表現構文はいずれもsed内では単語全体を照合するために機能しません。
\bmyWord\b
\<myWord\>
今私を聞いて、後で私を信じて、この醜い構文はあなたが使う必要があるものです:
/[[:<:]]myWord[[:>:]]/
したがって、たとえば、単語全体に対してのみmintをmintyに置き換えるには、次のようにします。
sed "s/[[:<:]]mint[[:>:]]/minty/g"
ソース:re_format manページ
sed
MacPortsまたはHomebrew経由でGNU (および他のすべてのGNUツール)をインストールし、それが最初に来ることを確認してくださいPATH
。Macをかなり使いやすくすることは可能です。
brew install coreutils
ます。
brew install gnu-sed
使用するgsed
perl -pe 's|\bone\b|two|g'
。sedがときどき失敗する間、安定して動作します。
\b
単語の境界に使用:
sed -i 's/\boldtext\b/newtext/g' <file>
[]
:o,l
->に注意してください[newtext],[newtext]
。あなたは明らかに意味しました sed -i 's/\boldtext\b/newtext/g'
私のマシンの1つでは、単語を " \b
"(引用符なし)で区切ると機能しませんでした。解決策は、「\<
」を区切り文字の開始に使用し、「」を区切り文字の\>
終了に使用することでした。
Joakim Lundbergの例で説明するには:
$ echo "bar embarassment" | sed "s/\<bar\>/no bar/g"
no bar embarassment
$ echo "bar embarassment"|awk '{for(o=1;o<=NF;o++)if($o=="bar")$o="no bar"}1'
no bar embarassment
echo " bar embarassment " | awk '{for(o=1;o<=NF;o++)if($o=="bar")$o="no bar"}1' | cat -E
ますno bar embarassment$
。