Grep invierte la coincidencia con el contexto

Grep invierte la coincidencia con el contexto

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 dy la siguiente línea que sigue a dicha coincidencia, así que tengo el siguiente grepcomando:

 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 '^[<>]'

información relacionada