sed删除不包含特定字符串的行

时间:2012-03-02 23:35:21

标签: 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完成此操作的任何提示?

4 个答案:

答案 0 :(得分:91)

这可能对您有用:

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

答案 1 :(得分:16)

您只想打印那些与'text'或'blah'(或两者)相匹配的行,其中'and'和'or'之间的区别非常重要。

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

-n表示默认情况下不打印。第一个模式搜索“文本”,如果匹配则打印它并跳到下一行;第二种模式对'blah'也是一样的。如果'n'不在那里,则包含'text and blah'的行将被打印两次。虽然我可以只使用-e '/blah/p',但对称性更好,特别是如果你需要扩展匹配词的列表。

如果您的sed版本支持扩展正则表达式(例如,GNU sed支持-r),那么您可以将其简化为:

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

答案 2 :(得分:5)

你可以通过awk,

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

答案 3 :(得分:0)

您要寻找grep吗? 这是查找不同文本的示例。

cat yourfile.txt | grep "text\|blah"