2012-02-04 12 views
11

Quiero cambiar todas las palabras en un texto que coincida con una palabra determinada con otra en bourne shell. Por ejemplo:Reemplazar una palabra con otra en bash

hello sara, my name is sara too. 

se convierte en:

hello mary, my name is mary too. 

¿Alguien puede ayudarme?
Sé que grep encuentra palabras similares pero quiero reemplazarlas por otras palabras.

Respuesta

9

sintaxis de fiesta pura:

before='hello sara , my name is sara too .' 
after=${before//sara/mary} 
echo $after 

o la sintaxis de sed:

sed 's/sara/mary/g' <<< $before 
echo $after 

SALIDA:

hello mary , my name is mary too . 
+1

La cadena de entrada sería mejor nombrada de otra manera que 's', para evitar confusiones en' $ {s // sara/mary} 'y''s/sara/mary/g''. – galath

6

Puede utilizar sed para ello:

$ sed s/sara/mary/g <<< 'hello sara , my name is sara too .' 
hello mary , my name is mary too . 

O si desea cambiar un archivo en su lugar:

$ cat FILE 
hello sara , my name is sara too . 
$ sed -i s/sara/mary/g FILE 
$ cat FILE 
hello mary , my name is mary too . 
3

Usted puede usar sed: salida

# sed 's/sara/mary/g' FILENAME 

voluntad Los resultados. La construcción /// significa buscar y reemplazar usando expresiones regulares. La 'g' al final significa "cada instancia" (no solo la primera).

También puede utilizar Perl y editar el archivo en su lugar:

# perl -p -i -e 's/sara/mary/g;' FILENAME 
+0

SED también se puede hacer en el lugar-modificación. –

+0

Más nuevos, por GNU, sí. –

0

Es necesario utilizar sed para reemplazar palabras

1

O awk

awk '{gsub("sara","mary")}1' <<< "hello sara, my name is sara too." 
Cuestiones relacionadas