如果我有一个unix文件包含以下内容:
aaaa12
bbbb34
ssss56
qqqq78
oooo90
aaaa01
bbbb23
我想在不同的行中搜索不同的模式。在上面的例子中,如果我想打印包含两个模式(aaaa)和(bbbb)的行,则输出应为:
aaaa12
bbbb34
aaaa01
bbbb23
与原始文件的顺序相同 执行此操作的合适的unix命令是什么
我尝试过egrep“aaaa | bbbb”,但输出结果为:
aaaa12
aaaa01
bbbb34
bbbb23
答案 0 :(得分:1)
尝试以下
grep "aaaa\|bbbb" file
现在它确实有效。
答案 1 :(得分:1)
这可能对您有用:
egrep "(aaaa|bbbb)" file
或者您可以使用awk
:
awk '/aaaa/||/bbbb/{print}' file
在这两种情况下,它都会在文件中搜索模式“aaaa”或“bbbb”,并将它们显示在文件中。 ()
中的括号egrep
用于分组。关于egrep
正则表达式的更多解释可以在这里找到:
结果如下:
$]egrep "(aaaa|bbbb)" file
aaaa12
bbbb34
aaaa01
bbbb23
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