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?

¿Fue útil?

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.

(De: http://ostermiller.org/findcomment.html )

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top