Yanıtlar:
Normal ifadelerde \ b, kelime sınırlarıyla eşleşir (yani, ilk kelime karakteri ile kelime olmayan karakter arasındaki konum):
$ echo "bar embarassment" | sed "s/\bbar\b/no bar/g"
no bar embarassment
\band\bgünü kurtardım :)
Mac OS X'te, bu normal ifade sözdizimlerinin hiçbiri tam kelimeleri eşleştirmek için sed içinde çalışmaz.
\bmyWord\b\<myWord\>Şimdi beni duy ve sonra inan bana, bu çirkin sözdizimi kullanmanız gereken şey:
/[[:<:]]myWord[[:>:]]/Bu nedenle, örneğin, yerine nane ile Naneli yalnızca tam kelimeler için:
sed "s/[[:<:]]mint[[:>:]]/minty/g"Kaynak: re_format kılavuz sayfası
sed(ve diğer tüm GNU araçlarını) MacPorts veya Homebrew aracılığıyla kurun ve PATH. Bir Mac'i oldukça kullanışlı hale getirmek mümkündür.
brew install coreutilstüm gnu araçlarının ön ekini kesinlikle önerebilirim .
brew install gnu-sedkullanmakgsed
perl -pe 's|\bone\b|two|g'. Sed burada ve orada başarısız olurken kararlı bir şekilde çalışır.
\bKelime sınırları için kullanın :
sed -i 's/\boldtext\b/newtext/g' <file>
[]: o,l-> [newtext],[newtext]. sed -i 's/\boldtext\b/newtext/g'
Makinemden birinde, kelimeyi " \b" ile (tırnak işaretleri olmadan) sınırlamak işe yaramadı. Çözüm, \<sınırlayıcıyı başlatmak için " \>" ve sınırlayıcıyı sonlandırmak için " " kullanmaktı.
Joakim Lundberg'in örneğiyle açıklamak gerekirse:
$ echo "bar embarassment" | sed "s/\<bar\>/no bar/g"
no bar embarassment
kabuk komutunda:
echo "bar embarassment" | sed "s/\bbar\b/no bar/g"
veya:
echo "bar embarassment" | sed "s/\<bar\>/no bar/g"
ama eğer vim içindeyseniz, sadece sonrasını kullanabilirsiniz:
:% s/\<old\>/new/g
$ 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 -Everir no bar embarassment$.