2009-06-01 25 views
6

Simplemente quiero leer en un archivo de registro, hacer una búsqueda y reemplazar, y luego escribir los cambios en ese mismo archivo de registro.Perl: Pasa por un archivo y sustituye

¿Cuál es la mejor manera de hacer esto en Perl?

Respuesta

9

normalmente codificar hasta un chiste para esto:

perl -i -pe 's/some/thing/' log.file 

Ver Here

+0

Pero, ¿por qué no puedo usar backreferances? Al igual que perl -pi -e "s/foo (. *) Bar/bar $ 1foo /" tezt2 no funciona ... –

+2

Probablemente su shell está dañando la cadena. Intenta reemplazar tus "" con "" para que el * no se expanda. –

+0

¡Gracias que lo hizo! –

8

Esto se suele hacer con una sola línea:

perl -pi.bak -e "s/find/replace/g" <file> 

Nota la parte -i.bak - esto crea un archivo de copia de seguridad con la extensión .bak. Si quieres jugar sin red se puede hacer esto para sobrescribir el archivo existente sin una copia de seguridad:

perl -pi -e "s/find/replace/g" <file> 
1

o puede utilizar sed (sé ... te preguntará sobre Perl):

sed -i 's/find/replace/g' <file> 
+0

La forma en que maneja sed las reglas de expresiones regulares es ... diferente, a la de Perl, por decir lo menos. – GJTorikian

Cuestiones relacionadas