unix匹配不同行中的多个模式

时间:2013-09-18 18:41:59

标签: unix search grep

如果我有一个unix文件包含以下内容:

aaaa12
bbbb34
ssss56
qqqq78
oooo90
aaaa01
bbbb23

我想在不同的行中搜索不同的模式。在上面的例子中,如果我想打印包含两个模式(aaaa)和(bbbb)的行,则输出应为:

aaaa12
bbbb34
aaaa01
bbbb23

与原始文件的顺序相同 执行此操作的合适的unix命令是什么

我尝试过egrep“aaaa | bbbb”,但输出结果为:

aaaa12
aaaa01
bbbb34
bbbb23

3 个答案:

答案 0 :(得分:1)

尝试以下

grep "aaaa\|bbbb" file

现在它确实有效。

答案 1 :(得分:1)

这可能对您有用:

egrep "(aaaa|bbbb)" file

或者您可以使用awk

awk '/aaaa/||/bbbb/{print}' file

在这两种情况下,它都会在文件中搜索模式“aaaa”或“bbbb”,并将它们显示在文件中。 ()中的括号egrep用于分组。关于egrep正则表达式的更多解释可以在这里找到:

http://www.gnu.org/software/findutils/manual/html_node/find_html/egrep-regular-expression-syntax.html

结果如下:

$]egrep "(aaaa|bbbb)" file
 aaaa12
 bbbb34
 aaaa01
 bbbb23
  • EDIT

OP可能希望输出在一行而不是多行。为此,你可以这样做:

egrep "aaaa|bbbb" file | awk '{printf $0" "}'

OR

awk '/aaaa/||/bbbb/{printf $0" "}' file

结果:

aaaa12 bbbb34 aaaa01 bbbb23

答案 2 :(得分:0)

最简单的形式是使用两个带-e:

的表达式
egrep -e aaaa -e bbbb file
fgrep -e aaaa -e bbbb file

输出:

aaaa12
bbbb34
aaaa01
bbbb23