Удалить все после шаблона, включая шаблон - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть текстовый файл типа

some
important
content
goes here
---from here--
some 
unwanted content

Я пытаюсь удалить все строки после ---from here--, включая ---from here--.То есть, желаемый результат -

some
important
content
goes here

Я пробовал sed '1,/---from here--/!d' input.txt, но он не удаляет часть ---from here--.Если я использую sed '/---from here--.*/d' input.txt, он удаляет только текст ---from here--.

Как удалить линии после шаблона, включающего этот шаблон?

РЕДАКТИРОВАТЬ

Я могу добиться этого, выполнив первую операцию и перенаправив вывод во вторую, например, sed '1,/---from here--/!d' input.txt | sed '/---from here--.*/d' > outputput.txt.
Есть ли одношаговое решение?

Ответы [ 5 ]

0 голосов
/ 06 февраля 2019

Вы можете попробовать Perl

perl -ne ' $x++ if /---from here--/; print if !$x '

, используя ваши входы ..

$ cat johnykutty.txt
some
important
content
goes here
---from here--
some
unwanted content

$ perl -ne ' $x++ if /---from here--/; print if !$x ' johnykutty.txt
some
important
content
goes here

$
0 голосов
/ 04 февраля 2019

Другой подход к awk:

awk '/---from here--/{exit}1' file

Если у вас GNU awk 4.1.0+, вы можете добавить -i inplace, чтобы изменить файл на месте.
В противном случае добавьте | tee file, чтобы изменитьфайл на месте.

0 голосов
/ 04 февраля 2019

Я не уверен, но я верю, что это будет работать:

sed -n '/---from here--/q; p' file

Команда q говорит sed прекратить обработку входных строк после сопоставления с данной строкой.

0 голосов
/ 04 февраля 2019

Другой подход с использованием sed:

sed '/---from here--/,$d' file

Команда d (удаление) применяется ко всем строкам от первой строки, содержащей ---from here-- до конца файла ($)

0 голосов
/ 04 февраля 2019

Не могли бы вы попробовать следующее (если вы в порядке с awk).

awk '/--from here--/{found_from=1} !found_from{print}' Input_file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...