【问题标题】:Searching for multiple keywords in one line在一行中搜索多个关键字
【发布时间】:2014-01-26 18:37:00
【问题描述】:

我想知道是否有强制“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

【问题讨论】:

    标签: linux macos terminal grep


    【解决方案1】:

    使用awk 你可以做到:

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

    awk '/OB.*CD/' file1
    

    这只会打印带有OBCD 的行。最后一个例子OB需要在CD之前出现

    【讨论】:

      【解决方案2】:

      您可以使用egrep。这样做

      egrep "(OB|CD)" file1
      

      【讨论】:

        【解决方案3】:

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

        grep 'OB.*CD' file1
        

        如果您希望关键字按任意顺序:

        grep "OB" file1 | grep "CD"
        

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-02-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-14
          • 1970-01-01
          • 2015-04-02
          相关资源
          最近更新 更多