
Estou tentando fazer grep em 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
Então, quero combinar todas as linhas, exceto aquelas que contêm d
e a próxima linha após essa correspondência, então tenho o seguinte grep
comando:
grep -v "d" -A 1 testing_grep.txt
No entanto, ainda recebo todas as linhas sendo emitidas, enquanto tudo que preciso é a seguinte saída:
aaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbb
cccccccccccccccccc
fffffffffffffffff
fffffffffffffffff
Obrigado por qualquer ajuda.
Responder1
Tente isto com GNU sed:
No espaço padrão (linha atual) procure ( //
) uma linha contendo d
. Somente para essas linhas anexe 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:
aaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbb bbbbbbbbbbbbbbb ccccccccccccccccc affffffffffffff affffffffffffff
Responder2
Cyrus já deu a resposta perfeita, mas se você quiser fazer isso com grep (que é mais complicado)
você grep 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 '^[<>]'