2008-09-19 31 views

Respuesta

32

Perl. En serio, hace que los sysadmin sean mucho más fáciles. He aquí un ejemplo:

perl -pi -e 's/something/somethingelse/g' *.log

+1

Una extensión de esto estaría usando egrep, ejemplo: 'perl -pi -e 's/something/algohinse/g' \ 'egrep -ril" algo "./ \' ' –

+0

As una nota, las banderas son: 'p ': imprimir, para cada línea,' I ': en línea de archivos de edición,' e': ejecutar el comando dado en la línea de comandos – brian

+0

Cómo hacer esto usando '' rg' y xargs'? – Purplejacket

3

Bajo Windows, que tenía gusto WinGrep

bajo Ubuntu, yo uso Regexxer.

+1

WinGrep ya no está disponible. Ahora puede usar [grepwin] (https://sourceforge.net/projects/grepwin/) en su lugar. – DanielTuzes

1

I'd go for bash + find + sed.

6

Textpad hace un buen trabajo en Windows. Y es un muy buen editor también.

+0

No podría estar más de acuerdo con que TextPad sea un excelente editor (mi favorito). Sin embargo, mientras busca en varios archivos (y muy rápidamente) no busca y reemplaza en varios archivos. –

+6

Sí lo hace. Lo que tiene que hacer es hacer clic derecho y seleccionar "Abrir todo" en los resultados de búsqueda. Esto abrirá todos los archivos encontrados. Luego, en el cuadro de diálogo Reemplazar, haga clic en el botón de radio "Todos los documentos" para saber dónde hacer la sustitución. Cuando termine, haga clic en "Guardar todo". – levik

+1

Blimey - nunca lo supo - aplausos. –

2

Para Mac OS X, TextWrangler hace el trabajo.

+0

Especialmente porque proporciona comentarios visuales y le permite revisar los cambios que realizó antes de guardarlos nuevamente en los archivos. Prefiero BBEdit, su hermano mayor, sin embargo, por su gran cantidad de funcionalidad. No es gratis como TextWrangler, aunque –

0

jEdit 's de búsqueda regular & reemplazar en los archivos es bastante decente. Sin embargo, un poco exagerado si solo lo usas para eso. Tampoco es compatible con el reemplazo de multiseguridad que solicitó.

4

Como era de esperar, Perl hace un buen trabajo de manejar esto, en conjunto con una cáscara decente:

for file in @filelist ; do 
    perl -p -i -e "s/pattern/result/g" $file 
done 

Esto tiene el mismo efecto (pero es más eficiente, y sin la condición de carrera) como:

for file in @filelist ; do 
    cat $file | sed "s/pattern/result/" > /tmp/newfile 
    mv /tmp/newfile $file 
done 
+0

También me gusta usar "find -iname" con thatm para obtener una búsqueda recursiva. –

4

editor de directorio de Emacs tiene la función `dired-do-query-replace-regexp' para buscar y reemplazar una expresión regular sobre una conjunto de archivos marcados.

1

Vim para el rescate (y presidente ;-)). Proveedores:

vim -c "argdo! s:foo:bar:gci" <list_of_files> 

(a mi me gusta -c de Vim, es magia O si ya tenía en Vim, y abrió los archivos, por ejemplo:.

vim <list_of_files> 

Sólo emisión:

:bufdo! s:foo:bar:gci 

Por supuesto sed y perl es capaz también. HTH.

18

que sed es fácil y rápido:

sed -e "s/pattern/result/" <file list> 

Usted también puede unirse con hallazgo:

find <other find args> -exec sed -e "s/pattern/result/" "{}" ";" 
+1

Estoy de acuerdo con lo rápido ... y es fácil solo por un valor dado de fácil. De todas formas 1;) –

+1

Sí, pero los problemas comenzarán cuando se tiene que pegar 10 líneas de código html largo con puntos, barras oblicuas, comillas y así sucesivamente a varios archivos. – alekwisnia

+2

Esto no parece actualizar los archivos, simplemente los muestra. El argumento '-i' parece arreglar eso. Ver también http://stackoverflow.com/questions/10445934/change-multiple-files –

2

Para buscar y reemplazar en varios archivos en Windows encontré rxFind a ser muy útil.

0

Encontré la herramienta RxFind útil (OSS gratis).

2

Mi favorito personal es PowerGrep por JGSoft. Se conecta con RegexBuddy que puede ayudarlo a crear y probar la expresión regular, realiza automáticamente copias de seguridad de todos los cambios (y proporciona capacidades de deshacer), proporciona la capacidad de analizar múltiples directorios (con patrones de nombre de archivo) e incluso admite formatos de archivo como Microsoft Word , Excel y PDF.

PowerGrep Screenshot

1

que tienen el lujo de Unix y Ubuntu; En ambos, uso gawk para cualquier cosa que requiera búsqueda y reemplazo línea por línea, especialmente para línea por línea para subcadenas. Recientemente, este fue el más rápido para el procesamiento de 1100 cambios contra millones de líneas en cientos de archivos (un directorio) En Ubuntu Soy un fan de regexxer

sudo apt-get install regexxer 
1

En Windows existe alternativa gratuita que funciona mejor: Notepad ++

Ir a "Buscar" -> "Buscar en archivos". Uno puede dar el directorio, el patrón de archivos, establecer expresiones regulares, luego obtener una vista previa de las coincidencias y, finalmente, reemplazar todos los archivos recursivamente.

4

He escrito una herramienta de línea de comandos gratuita para que Windows haga esto. Se llama rxrepl, es compatible con la búsqueda de archivos y unicode. Algunos pueden encontrarlo útil.

1

Me encanta esta herramienta:

http://www.abareplace.com/

le da una "mientras escribe" vista previa de la expresión regular ... fantástico para aquellos que no están bien versados ​​en el RE de ... y es súper rápido en el cambio de cientos o miles de archivos a la vez ...

Y luego vamos a deshacer los cambios, así ...

Muy bonito ...

Patrick Steil - http://www.podiotools.com

1

si 'textpad' es una respuesta válida, sugeriría Sublime Text las manos hacia abajo.

Las ediciones con cursor múltiple son una forma aún más eficiente de hacer reemplazos en general, pero su "Find in Files" es el nivel superior para reemplazos de regex/plain find en grandes cantidades.

0

Brackets (código fuente, deb/Ubuntu, OSx y Windows) tiene una buena visualización de los resultados, lo que permite seleccionarlos individualmente para aplicar la sustitución. Puede buscar por texto estándar, mayúsculas y minúsculas, y regex. Muy importante: puede excluir patrones de archivos y directorios en la búsqueda.

Cuestiones relacionadas