Eliminar texto multilínea de varios archivos
Pregunta
Tengo un montón de archivos java de los que quiero eliminar las líneas javadoc con la licencia [lo estoy cambiando en mi código].
El patrón que estoy buscando es
^ \ * \ * ProjectName. * USA \. $
pero combinadas entre líneas
¿Existe alguna manera de que sed [o un editor de uso común en Windows / Linux] pueda realizar una búsqueda / reemplazo para un patrón de varias líneas?
Solución
Aquí está el punto de referencia apropiado en mi tutorial favorito.
Otros consejos
Sí. ¿Está utilizando sed, awk, perl o alguna otra cosa para resolver este problema?
La mayoría de las herramientas de expresión regular le permiten especificar patrones de varias líneas. Solo tenga cuidado con las expresiones regulares que son demasiado codiciosas, o coincidirán con el código entre los comentarios, si existe.
Aquí hay un ejemplo:
/\*(?:.|[\r\n])*?\*/
perl -0777ne 'print m!/\*(?:.|[\r\n])*?\*/!g;' <file>
Imprime todos los comentarios ejecutados juntos. La (?: Notación debe ser utilizado para paréntesis no captura. / No tiene que ser escapado porque! delimita la expresión. -0777 se utiliza para habilitar el modo slurp y -n habilita Lectura automática.
Probablemente alguien todavía esté buscando esa solución de vez en cuando. Aquí hay uno.
Usa awk para encontrar las líneas a eliminar. Luego use diff para eliminar las líneas y deje que limpie.
awk "/^\* \* ProjectName /,/ USA\.$/" input.txt \
| diff - input.txt \
| sed -n -e"s/^> //p" \
>output.txt
Una nota de advertencia: si el primer patrón existe mientras que el segundo no existe, perderá todo el texto debajo del primer patrón, así que verifique primero.