2011-12-21 29 views
14

¿Cómo puedo reemplazar "abc" con "abcd" en todos los archivos de una carpeta con shell?Linux buscar y reemplazar

¿Es posible usar el comando sed?

+1

Sí, es posible. Explore la página del manual ... –

+0

@ Vikram.exe la página del manual no explica nada sobre las expresiones regulares del sed a través de – fge

+0

@fge, también hay una página del manual :) o cheque: http: // linux. die.net/man/7/regex –

Respuesta

35

intentar el siguiente comando para el archivo archivo.txt:

sed -i 's/abc/abcd/g' file.txt 


intentar el siguiente comando para todos los archivos de la carpeta actual:

find . -maxdepth 1 -type f -exec sed -i 's/abc/abcd/g' {} \; 

Para los archivos en el directorio actual y todos los subdirectorios:

find . -type f -exec sed -i 's/abc/abcd/g' {} \; 

O si usted es fan de xargs:

find . -type f | xargs -I {} sed -i 's/abc/abcd/g' {} 
+0

Lo necesito para todos los archivos en una carpeta, no para un solo archivo –

+0

pago mi edición;) – kbdjockey

+1

+1 para el hallazgo. porque si el dir tiene subDir, esas soluciones sed ... * fallarán. – Kent

1
sed -i 's/abc/&d/g' * 

debería funcionar.

+0

También reemplazará '0abcd',' abcd' etc. – fge

+0

sí, la pregunta solo indica reemplazar abc. Sin indicación sobre "palabras completas". – Nikodemus

0

Sí:

find /the/folder -type f -exec sed -i 's,\<abc\>,&d,g' {} \;