sed删除不包含特定string的行

我是新来sed ,我有以下问题。 在这个例子中:

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

我想删除除了那些包含string'文本' 'string'的所有行,所以我的输出文件如下所示:

 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 

你只想打印符合'text'或'blah'(或两者)的行,'and'和'or'之间的区别是非常重要的。

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

-n表示默认情况下不打印。 第一种模式search“文本”,如果匹配则打印,然后跳到下一行; 第二种模式对“blah”也是一样的。 如果“n”不在那里,那么包含“text和blah”的行将被打印两次。 尽pipe我可以使用-e '/blah/p' ,对称性会更好,尤其是如果您需要扩展匹配的单词列表时。

如果你的sed版本支持扩展的正则expression式(例如,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