Respuestas:
\ b en las expresiones regulares coincide con los límites de las palabras (es decir, la ubicación entre el carácter de la primera palabra y el carácter que no es una palabra):
$ echo "bar embarassment" | sed "s/\bbar\b/no bar/g"
no bar embarassment
\band\bsalvó el día :)
En Mac OS X, ninguna de estas sintaxis de expresiones regulares funciona dentro de sed para hacer coincidir palabras completas
\bmyWord\b\<myWord\>Escúchame ahora y créeme más tarde, esta fea sintaxis es lo que necesitas usar:
/[[:<:]]myWord[[:>:]]/Entonces, por ejemplo, para reemplazar menta con menta solo para palabras completas:
sed "s/[[:<:]]mint[[:>:]]/minty/g"Fuente: página de manual de re_format
sed(y todas las demás herramientas GNU) a través de MacPorts o Homebrew y asegúrese de que sea lo primero en su PATH. Es posible hacer que una Mac sea bastante utilizable.
brew install coreutils, que antepone todas las herramientas GNU.
brew install gnu-sedpara usargsed
perl -pe 's|\bone\b|two|g'. Funciona de forma estable mientras sed falla aquí y allá.
Usar \bpara límites de palabras:
sed -i 's/\boldtext\b/newtext/g' <file>
[]: o,l-> [newtext],[newtext]. Obviamente sed -i 's/\boldtext\b/newtext/g'
En una de mis máquinas, delimitar la palabra con " \b" (sin las comillas) no funcionó. La solución fue utilizar " \<" para el delimitador inicial y " \>" para el delimitador final.
Para explicar con el ejemplo de Joakim Lundberg :
$ echo "bar embarassment" | sed "s/\<bar\>/no bar/g"
no bar embarassment
en el comando de shell:
echo "bar embarassment" | sed "s/\bbar\b/no bar/g"
o:
echo "bar embarassment" | sed "s/\<bar\>/no bar/g"
pero si está en vim, solo puede usar la última:
:% 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 -Eda no bar embarassment$.