Как я могу использовать «sed» для удаления 2 строк после матча / совпадений? - PullRequest
15 голосов
/ 30 ноября 2011

У меня есть следующая команда: sed -i -e '/match1/,+2d' filex, которая удаляет 2 строки после нахождения совпадения «match1» в файле «файл x». Я хочу добавить несколько совпадений, например match1, match 2 ....

Таким образом, он удалит 2 строки после нахождения любого совпадения, как мне этого добиться?

Ответы [ 3 ]

27 голосов
/ 30 ноября 2011

Два способа, в зависимости от версии sed и платформы:

sed -e '/match1/,+2d' -e '/match2/,+2d' < oldfile > newfile

или

sed -e '/match1\|match2/,+2d' < oldfile > newfile
8 голосов
/ 30 ноября 2011

Не пользователь sed, но мне кажется, вы могли бы использовать:

sed -i -e '/(match1|match2)/,+2d' filex

В противном случае, если это возможно, вы можете сделать:

sed -i -e '/match1/,+2d' filex && sed -i -e '/match2/,+2d' filex

РЕДАКТИРОВАТЬ:Похоже, у меня была правильная идея, но Зиу поняла это.

4 голосов
/ 30 ноября 2011

Если я вас правильно понимаю, вы хотите

sed -e '/match1/,+2d' input.txt

Например, создать ввод с помощью seq 10 | sed '3i match1' > input.txt:

1
2
match1
3
4
5
6
7
8
9
10

Вывод sed -e '/match1/,+2d' input.txt будет:

1
2
5
6
7
8
9
10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...