¿Cómo busco y reemplazo palabras completas usando sed?búsqueda de palabra completa sed y reemplazar
Haciendo
sed -i 's/[oldtext]/[newtext]/g' <file>
también reemplazará coincidencias parciales de [oldtext]
la que no quiero que haga.
¿Cómo busco y reemplazo palabras completas usando sed?búsqueda de palabra completa sed y reemplazar
Haciendo
sed -i 's/[oldtext]/[newtext]/g' <file>
también reemplazará coincidencias parciales de [oldtext]
la que no quiero que haga.
\ b en expresiones regulares límites de las palabras de los partidos (es decir, la ubicación entre el primer carácter de palabras y caracteres no-palabra):
$ echo "bar embarassment" | sed "s/\bbar\b/no bar/g"
no bar embarassment
Uso \b
de los límites de palabra:
sed -i 's/\boldtext\b/newtext/g' <file>
Tenga cuidado con '[]': 'o, l' ->' [newtext], [newtext] '. Usted obviamente quiso decir 'sed -i 's/\ boldtext \ b/newtext/g'' – JJoao
En una de mi máquina, delimitando la palabra con "\b
" (sin las comillas) no funcionó. La solución fue usar "\<
" para iniciar el delimitador y "\>
" para finalizar el delimitador.
Para explicar con Joakim Lundberg 's ejemplo:
$ 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
OP declara explícitamente" using sed " – ndemou
Sin embargo, es una buena solución. – fedorqui
Esto es un split-manipulate-join, no un reemplazo puro; esto colapsa múltiples espacios en uno y descarta cualquier espacio inicial/final: p. barra de eco "vergüenza" | awk '{for (o = 1; o <= NF; o ++) if ($ o == "bar") $ o = "sin barra"} 1' | cat -E' da 'no bar vergüenza $'. – musiphil
En Mac OS X, ni de estas sintaxis de expresiones regulares de trabajo dentro sed para hacer coincidir palabras completas
\bmyWord\b
\<myWord\>
Ahora me escuchas y me creen más tarde, este sintaxis feo es lo que hay que utilizar:
/[[:<:]]myWord[[:>:]]/
Así, por ejemplo, para reemplazar menta con menta para palabras completas solamente:
sed "s/[[:<:]]mint[[:>:]]/minty/g"
Fuente: re_format man page
Simplemente instale GNU 'sed' (y cualquier otra herramienta GNU) a través de MacPorts o Homebrew y asegúrese de que esté primero en su' PATH'. Es posible hacer una Mac bastante utilizable. –
@JimStewart es una gran manera de romper un montón de herramientas que asumen 'cuando en OS X, hacen como OS Xers'. Dicho esto, definitivamente puedo sugerir 'brew install coreutils', que prefija todas las herramientas gnu. – ELLIOTTCABLE
'brew install gnu-sed' para usar' gsed' – k107
de comando shell:
echo "bar embarassment" | sed "s/\bbar\b/no bar/g"
o:
echo "bar embarassment" | sed "s/\<bar\>/no bar/g"
pero si usted está en vim, sólo se puede usar el más tarde:
:% s/\<old\>/new/g
¡gran explicación! – JohnTortugo
claramente 'No hay vergüenza'. Texto de ejemplo inteligente;) – mtk
[no posix] (http://sed.js.org/?gist=0d0377fffd0f8b21886ff288bc260423) | [GNU sed] (http://sed.js.org/?gist = 3c69aaff8facf8040a7c9556e80f0868) OK –