Удалить строки x после совпадения

Удалить строки x после совпадения

Как можно использовать sedфункцию для удаления строк, следующих за совпадением (или любого другого числа), но не включая само совпадение и строки между ними?

Например:

Enter command below
> login
Command valid
Enter your password at the below prompt
Remember to make sure no-one is looking at your screen
> mysecretword
Password accepted

Я хочу удалить только строку "> mysecretword" из-за того, что она находится на две строки после строки "Введите свой пароль в приглашении ниже". Я не могу использовать абсолютные позиции номеров строк, потому что совпадение может появиться через любое количество строк после начала файла.

Поискав в интернете, я нашел много решений, таких как sed '/Enter your password.*/,+3d' filex, но это также удалило бы строку "Введите свой пароль..." и следующую строку, что не то, что мне нужно. Я хочу удалить только одну строку, которая представляет собой определенное количество строк после совпадения.

Как это можно сделать с помощью sed(или любого другого общедоступного инструмента)?

решение1

Возможно

sed '/^Enter your password/ {
n
n
d
}' file

или эквивалентно:

$ sed '/^Enter your password/ {n;n;d;}' file
Enter command below
> login
Command valid
Enter your password at the below prompt
Remember to make sure no-one is looking at your screen
Password accepted

решение2

Для общих случаев см. этот превосходный ответ Эда Мортона:Печать строки с помощью sed или awk по соответствующему шаблону .

d) Вывести каждую запись, кроме N-й записи после некоторого регулярного выражения:

awk 'c&&!--c{next}/regexp/{c=N}1' file

Подача заявки на данный ввод

$ awk 'c && !--c{next} /^Enter your password/{c=2} 1' ip.txt 
Enter command below
> login
Command valid
Enter your password at the below prompt
Remember to make sure no-one is looking at your screen
Password accepted
  • /^Enter your password/{c=2} 1вот cn-ная строка после совпадения, которую нужно проигнорировать, 1чтобы вывести входную запись
  • c && !--c{next}оператор &&короткой схемы is, поэтому, пока cон оценивается как false, cне будет уменьшаться. После того, как cis установлен в значение, он будет уменьшаться, пока не достигнет0

решение3

sed '/Enter your password.*/{N;p;N;d;}' file

Связанный контент