Grep jogo invertido com contexto

1

Eu estou tentando grep um arquivo com correspondência invertida, mas também não corresponde a todas as linhas que ocorrem logo após as linhas correspondentes.

Portanto, tenho o seguinte conteúdo em um arquivo chamado testing_grep :

aaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbb
cccccccccccccccccc
dddddddddddddddddd
llllllllllllllllll
dddddddddddddddddd
llllllllllllllllll
fffffffffffffffff
fffffffffffffffff

Portanto, quero corresponder todas as linhas, exceto as que contêm d e a próxima linha após essa correspondência, portanto, tenho o seguinte comando grep :

 grep -v "d" -A 1 testing_grep.txt 

No entanto, ainda recebo todas as linhas sendo enviadas, enquanto tudo que eu preciso é a seguinte saída:

aaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbb
cccccccccccccccccc
fffffffffffffffff
fffffffffffffffff

Obrigado por qualquer ajuda.

    
por kolonel 01.05.2015 / 09:28

2 respostas

1

Tente isso com o GNU sed:

Na pesquisa de espaço padrão (linha atual) ( // ), uma linha contendo d . Somente para essas linhas acrescente a próxima linha de entrada no espaço padrão ( N ) e exclua o espaço padrão ( d ).

sed '/d/{N;d;}' testing_grep.txt

Saída:

aaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbb
cccccccccccccccccc
fffffffffffffffff
fffffffffffffffff
    
por 01.05.2015 / 10:03
0

Cyrus já te deu a resposta perfeita, mas se você quiser fazer isso com o grep (o que é mais complicado)

você usa as linhas que não deseja e as coloca em um arquivo:

grep 'd' -A 1 testing_grep.txt > otherfile.txt

O conteúdo de

otherfile.txt será: dddddddddddddddddd llllllllllllllllll dddddddddddddddddd llllllllllllllllll

Então você usa o comando diff para obter a diferença:

diff testing_grep.txt otherfile.txt | grep '^[<>]'

    
por 01.05.2015 / 10:22

Tags