2009-06-23 13 views

Respuesta

126

\ 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 
+0

¡gran explicación! – JohnTortugo

+6

claramente 'No hay vergüenza'. Texto de ejemplo inteligente;) – mtk

+3

[no posix] (http://sed.js.org/?gist=0d0377fffd0f8b21886ff288bc260423) | [GNU sed] (http://sed.js.org/?gist = 3c69aaff8facf8040a7c9556e80f0868) OK –

11

Uso \b de los límites de palabra:

sed -i 's/\boldtext\b/newtext/g' <file> 
+3

Tenga cuidado con '[]': 'o, l' ->' [newtext], [newtext] '. Usted obviamente quiso decir 'sed -i 's/\ boldtext \ b/newtext/g'' – JJoao

7

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 
-2
$ echo "bar embarassment"|awk '{for(o=1;o<=NF;o++)if($o=="bar")$o="no bar"}1' 
no bar embarassment 
+0

OP declara explícitamente" using sed " – ndemou

+0

Sin embargo, es una buena solución. – fedorqui

+0

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

103

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

+13

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. –

+6

@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

+14

'brew install gnu-sed' para usar' gsed' – k107

1

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 
Cuestiones relacionadas