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\b
gü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 coreutils
tüm gnu araçlarının ön ekini kesinlikle önerebilirim .
brew install gnu-sed
kullanmakgsed
perl -pe 's|\bone\b|two|g'
. Sed burada ve orada başarısız olurken kararlı bir şekilde çalışır.
\b
Kelime 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 -E
verir no bar embarassment$
.