Sed: удалить строки после шаблона на все случаи жизни - PullRequest
0 голосов
/ 23 сентября 2018

Мне нужна была помощь с sed.Я пытаюсь удалить 3 строки после шаблона для всех вхождений в файле.Я делаю

sed '/pattern/,+3d' file.

Это удаляет только 3 строки и шаблон для первого вхождения, но просто удаляет шаблон для второго вхождения, но не строки, после которых действительно запутано.Может кто-нибудь помочь с тем, что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 23 сентября 2018

Это может работать для вас (GNU sed):

sed -n '/regexp/{p;:a;n;//ba;n;//ba;n;//ba;d};p' file

Если встречается регулярное выражение, выведите текущую строку, а затем удалите следующие 3 строки.В любое время, читая эти 3 строки, происходит регулярное выражение, сбросьте счетчик.

Если регулярное выражение также необходимо удалить, используйте:

sed -n '/regexp/{:a;n;//ba;n;//ba;n;//ba;d};p' file
0 голосов
/ 23 сентября 2018

Я думаю, awk лучше для этой задачи.Например,

$ cat file
1
2
4
a0
1
a1
1
2
3
4
5

Выполнить

awk '
flag   { i ++            }
i == 3 { flag = 0        }
!flag
/a/    { flag = 1; i = 0 }
' file

Вывод

1
2
4
a0
3
4
5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...