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