Строки удаления sed, не содержащие определенную строку - программирование
Подтвердить что ты не робот

Строки удаления sed, не содержащие определенную строку

Я новичок в sed, и у меня есть следующий вопрос. В этом примере:

some text here
blah blah 123
another new line
some other text as well
another line

Я хочу удалить все строки, кроме тех, которые содержат строку 'text' и или строку 'blah', поэтому мой выходной файл выглядит так:

some text here
blah blah 123
some other text as well

Любые подсказки, как это можно сделать с помощью sed?

4b9b3361

Ответ 1

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

sed '/text\|blah/!d' file
some text here
blah blah 123
some other text as well

Ответ 2

Вы хотите напечатать только те строки, которые соответствуют либо "текст", либо "бла" (или оба), где различие между "и" и "или" имеет решающее значение.

sed -n -e '/text/{p;n;}' -e '/blah/{p;n;}' your_data_file

-n означает, что по умолчанию печать не выполняется. Первая модель ищет "текст", печатает ее, если она сопоставлена, и переходит к следующей строке; второй шаблон делает то же самое для "бла". Если "n" не было, тогда строка, содержащая "текст и бла", будет напечатана дважды. Хотя я мог бы использовать только -e '/blah/p', симметрия лучше, особенно если вам нужно расширить список совпадающих слов.

Если ваша версия sed поддерживает расширенные регулярные выражения (например, GNU sed делает с -r), вы можете упростить это:

sed -r -n -e '/text|blah/p' your_data_file

Ответ 3

Вы можете просто сделать это через awk,

$ awk '/blah|text/' file
some text here
blah blah 123
some other text as well