Ответ 1
Это может сработать для вас:
sed '/text\|blah/!d' file
some text here
blah blah 123
some other text as well
Я новичок в 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
?
Это может сработать для вас:
sed '/text\|blah/!d' file
some text here
blah blah 123
some other text as well
Вы хотите напечатать только те строки, которые соответствуют либо "текст", либо "бла" (или оба), где различие между "и" и "или" имеет решающее значение.
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
Вы можете просто сделать это через awk,
$ awk '/blah|text/' file
some text here
blah blah 123
some other text as well