2009-11-12 25 views
22

Necesito encontrar una expresión regular para eliminar todas las líneas que no comienzan con "+" o "-".¿Cómo puedo eliminar todas las líneas que no comienzan con ciertos caracteres?

Quiero imprimir una copia en papel de un archivo diff grande, pero muestra 5 o más líneas antes y después de la diferencia real.

+1

Por qué no puedes simplemente regenerar el diff y dilo a reducir el # de líneas de contexto? –

+1

Por lo que acabo de sugerir, el comando es 'diff -c 0 -u 0' –

Respuesta

46

En VIM:

:g!/^[+-]/d

Aquí está la traducción Inglés:

g lobally hacer algo para todas las líneas que no ! la expresión regular: inicio de la línea ^ seguido de + o -, y que algo hay que hacer es d elete esas líneas

+0

Genial, gracias! Esta es una buena solución. – mager

+4

si quiere guardar una pulsación de tecla: ': v' es un sinónimo de ': g!' :) –

+0

¡Eso ahorra dos teclas! Shift, 1. Limpio. – Marcin

0

diff -u <some args here> | grep '^[+-]'

O simplemente no podía producir las líneas adicionales en absoluto:

diff --unified=0 <some args>

0
cat your_diff_file | sed '/^[+-]/!D' 
+0

uso inútil de' cat': 'sed' acepta nombres de archivo como argumentos –

+0

Acepte este caso en particular. Normalmente utilizo cat cuando uso una larga cadena de comandos sed para filtrar los datos de forma incremental. Si tengo un archivo de datos demasiado grande para empezar, reemplazo cat con head -100 y la parte restante permanece igual. –

0
egrep "^[+-]" difffile >outputfile 

En lugar de eliminar todo lo que no coincide, muestra solo las líneas que coinciden. :)

+1

Definitivamente necesita otro símbolo de intercalación y es posible que no necesite "e" ni comillas. Esto funciona para mí: 'grep^[^ + -]' –

0

Si necesita hacer algo más complejo en términos de expresiones regulares, se debe utilizar este sitio: http://txt2re.com/

sino que también proporciona ejemplos de código para muchos idiomas diferentes.

+0

¡Gracias! ¡Esto es asombroso! – mager

Cuestiones relacionadas