2010-11-24 15 views
8

Bueno, realmente quería crear un filtro para usar en DeltaWalker para ignorar archivos con solo una diferencia de línea particular, para poder identificar los archivos que tenían otros cambios en el código fuente. Stackoverflow regex guru me dio varias buenas expresiones que producen buenos resultados find -exec grep en OS X Terminal, pero no tienen efecto en los resultados de DeltaWalker. Entonces, tengo otra idea.Cómo usar find, -exec, grep y sed con expresión regular para reemplazar parte de una línea de texto?

Recuerdo una utilidad llamada sed, que no tengo experiencia ... pero, creo que podría llamarse con el modificador find -exec. Entonces, tengo lo siguiente y me pregunto si alguien sabe cómo mezclar sed para reemplazar la línea de texto correspondiente: "Copyright (c) 2008 - 2009" con "Copyright (c) 2008 - 2010"

find . -exec grep -Hn '^.*Copyright (c) 2008 - 2009' {} \; 
+0

Thin puede no ser de ayuda, pero en el mundo de Windows hay una tonelada de editores de texto libre que hacen una búsqueda/reemplazo en directorios de archivos completos. Eso es si estás buscando una solución rápida y no estás tratando de arreglar el problema para el futuro también ... solo fwiw – Keng

Respuesta

12

usted simplemente puede hacer esto

find . -exec sed -r -e 's/(^.*)Copyright \(c\) 2008 - 2009/\1Copyright (c) 2008 - 2010/g' {} \; 

estoy suponiendo aquí que no quiere perder lo que sea que está en la línea antes de derecho de autor y se corresponde con .*

Pero, dependiendo en su entrada, podría ser tan simple como

find . -exec sed -e 's/2009/2010/g' {} \; 

Tenga en cuenta que en ambos casos no estoy modificando los archivos, simplemente mostrando cómo se verían los resultados de la modificación de los contenidos. Me imagino que en su escenario real querría escribir los cambios en el disco. Para ello, tiene la opción -i de sed, por lo tanto:

find . -exec sed -r -i'' -e 's/(^.*)Copyright \(c\) 2008 - 2009/\1Copyright (c) 2008 - 2010/g' {} \; 

Vale la pena señalar que aquí estoy usando la sintaxis de GNU sed. No tengo una caja de OS X a mano para probar, pero BSD sed generalmente usa -E en lugar de -r para encender la expresión regular extendida.

Cuestiones relacionadas