首页 > 解决方案 > 保留包含“不同单词列表”的行,如模式

问题描述

如何保持与所有这些单词 totoOR titiOR clicOR匹配的所有行SOMETHING并删除任何其他行?

如果我这样做,sed '/toto/ p ' file我无法选择titi例如。

我正在寻找的是类似于 Perl 正则表达式 as 的东西 ^ (word1|word2|word3|andsoon).*。但是,我需要它,sed因为它将被集成到更大的sed脚本中。

目标是使所有行都以wordwhere wordis any word from a set of words 开头。

标签: sed

解决方案


这里的答案取决于你的主脚本是如何被调用的。假设您有一个包含以下内容的文件:

foo
car
bar

并且您对匹配“foo”和“bar”的行感兴趣,那么您可以执行以下操作:

sed '/foo\|bar/!d'
sed -n '/foo\|bar/!d;p'
sed -n '/foo\|bar/p'

所有这些都将输出:

foo
bar

如果你只是这样做:

sed '/foo\|bar/p'

你实际上复制了这些行。

foo
foo
car
bar
bar

如您所见,根据-n标志的使用情况会有一些不同的处理。

-n, --quiet, --silent抑制图案空间的自动打印

资源:man sed

一般来说,我的建议是删除sed脚本开头不需要的行。


推荐阅读