Pregunta

¿Cómo buscar y reemplazar una cadena en la línea de comandos en varios archivos en UNIX?

¿Fue útil?

Solución

hay muchas maneras .Pero una de las respuestas sería:

find . -name '*.html' |xargs perl -pi -e 's/find/replace/g'

Otros consejos

Al igual que la solución del zombi (y más rápido supongo) pero con sed (estándar en muchas distribuciones y OSX) en lugar de Perl:?

find . -name '*.py' | xargs sed -i .bak 's/foo/bar/g'

Esto reemplazará todos los foo ocurrencias en los archivos de Python bajo el directorio actual con bar y crear una copia de seguridad para cada archivo con el .py.bak extensión.

Y para eliminar archivos de .bak:

find . -name "*.bak" -delete

Siempre que hice con guiones ed o ex guiones .

for i in "$@"; do ex - "$i" << 'eof'; done
%s/old/new/
x
eof

La ex de comandos es sólo el:. Modo de línea de vi

Uso de encontrar y de sed por nombre o directorios con el uso de este espacio:

find . -name '*.py' -print0 | xargs -0 sed -i 's/foo/bar/g'

con la reciente cáscara del golpe, y asumiendo que no es necesario para atravesar los directorios

for file in *.txt
do
while read -r line
do
    echo ${line//find/replace} > temp        
done <"file"
mv temp "$file"
done 
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top