1

Я пытаюсь выполнить поиск в файле с инвертированным соответствием, но также не совпадает с каждой строкой, встречающейся сразу после совпадающих строк.

Итак, у меня есть следующее содержимое в файле с именем testing_grep:

aaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbb
cccccccccccccccccc
dddddddddddddddddd
llllllllllllllllll
dddddddddddddddddd
llllllllllllllllll
fffffffffffffffff
fffffffffffffffff

Поэтому я хочу сопоставить все строки, кроме тех, которые содержат d и следующую строку после такого соответствия, поэтому у меня есть следующая команда grep :

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

Тем не менее, я все еще получаю все строки, в то время как все, что мне нужно, это следующий вывод:

aaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbb
cccccccccccccccccc
fffffffffffffffff
fffffffffffffffff

Спасибо за любую помощь.

2 ответа2

2

Попробуйте это с помощью GNU sed:

В шаблонном пространстве (текущая строка) ищите (//) строку, связывающую d . Только для этих строк добавьте следующую строку ввода в пространство образца (N) и удалите пространство образца (d).

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

Выход:

aaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbb
cccccccccccccccccc
fffffffffffffffff
fffffffffffffffff
0

Сайрус уже дал вам идеальный ответ, но если вы хотите сделать это с помощью grep (что более сложно)

Вы получаете строки, которые вам не нужны, и помещаете их в файл:

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

Содержимое otherfile.txt будет: dddddddddddddddddd llllllllllllllllll dddddddddddddddddd llllllllllllllllll

Затем вы используете команду diff, чтобы получить разницу:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .