
Estoy intentando buscar un archivo con coincidencia invertida, pero tampoco hacer coincidir todas las líneas que aparecen justo después de las líneas coincidentes.
Entonces tengo el siguiente contenido en un archivo llamado testing_grep
:
aaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbb
cccccccccccccccccc
dddddddddddddddddd
llllllllllllllllll
dddddddddddddddddd
llllllllllllllllll
fffffffffffffffff
fffffffffffffffff
Entonces quiero hacer coincidir todas las líneas excepto las que contienen d
y la siguiente línea que sigue a dicha coincidencia, así que tengo el siguiente grep
comando:
grep -v "d" -A 1 testing_grep.txt
Sin embargo, sigo generando todas las líneas, mientras que todo lo que necesito es el siguiente resultado:
aaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbb
cccccccccccccccccc
fffffffffffffffff
fffffffffffffffff
Gracias por cualquier ayuda.
Respuesta1
Pruebe esto con GNU sed:
En el espacio del patrón (línea actual), busque ( //
) una línea que contenga d
. Solo para esas líneas agregue la siguiente línea de entrada en el espacio del patrón ( N
) y elimine el espacio del patrón ( d
).
sed '/d/{N;d;}' testing_grep.txt
Producción:
aaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbb bbbbbbbbbbbbbbbbbbb ccccccccccccccccc ffffffffffffffff ffffffffffffffff
Respuesta2
Cyrus ya te dio la respuesta perfecta, pero si quieres hazlo con grep (que es más complicado)
recoges las líneas que no quieres y las pones en un archivo:
grep 'd' -A 1 testing_grep.txt > otherfile.txt
El contenido de otherfile.txt será:
dddddddddddddddddd llllllllllllllllll dddddddddddddddddd llllllllllllllllll
Luego usas el comando diff para obtener la diferencia:
diff testing_grep.txt otherfile.txt | grep '^[<>]'