0

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

aaaa12
bbbb34
ssss56
qqqq78
oooo90
aaaa01
bbbb23

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

aaaa12
bbbb34
aaaa01
bbbb23

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

我试过 egrep "aaaa | bbbb" 但输出是:

aaaa12
aaaa01
bbbb34
bbbb23
4

3 回答 3

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
  • 编辑

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

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

或者

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

结果 :

aaaa12 bbbb34 aaaa01 bbbb23
于 2013-09-18T18:44:48.957 回答
1

尝试以下

grep "aaaa\|bbbb" file

现在它真的有效。

于 2013-09-18T18:44:39.000 回答
0

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

egrep -e aaaa -e bbbb file
fgrep -e aaaa -e bbbb file

输出:

aaaa12
bbbb34
aaaa01
bbbb23
于 2013-09-18T20:18:27.767 回答