在一行中搜索多个关键字

时间:2014-01-26 18:37:01

标签: linux macos terminal grep

我想知道是否还有强制“grep”命令在同一个字符串或行中搜索多个关键字。 例:  假设我有以下块文本:

 CT1   CD    750.000     1.2200 
 OB    CD    750.000     1.2200 
 OB    H     545.000     0.9600 
 CT1   CD   CP1   70.000    125.00   20.00   2.44200 ! ALLOW ALI PEP POL ARO PRO
 OB    CD   CT1   70.000    125.00   20.00   2.44200 ! ALLOW   ALI PEP POL ARO

我正在搜索仅包含“OB”和“CD”的行。所以我期望的输出是:

 OB    CD    750.000     1.2200 
 OB    CD   CT1   70.000    125.00   20.00   2.44200 ! ALLOW   ALI PEP POL ARO

但是,当我使用命令时:grep "OB \| CD" file1  我将获得整个块文本。

那么,是否有任何组合以我想要的方式减少输出?

非常感谢提前。

P.S。:我使用linux和os 10.9

3 个答案:

答案 0 :(得分:0)

您可以使用egrep。做到了

egrep "(OB|CD)" file1

答案 1 :(得分:0)

使用awk即可:

awk '/OB/ && /CD/' file1

awk '/OB.*CD/' file1

这只会打印OBCD的行。最后一个示例OB需要在CD

之前出现

答案 2 :(得分:0)

如果关键字的顺序很重要:

grep 'OB.*CD' file1

如果您想要任何顺序的关键字:

grep "OB" file1 | grep "CD"

grep "OB \| CD" file1返回所有行,因为它具有逻辑OR而不是AND。