【问题标题】:Match exact word using grep使用 grep 匹配确切的单词
【发布时间】:2012-10-03 23:46:11
【问题描述】:

我需要搜索一个确切的单词并打印一行。如果我在行中没有任何 .(点),它就可以工作。

$cat file
test1 ALL=ALL
w.test1 ALL=ALL

$grep -w test1 file
test1 ALL=ALL
w.test1 ALL=ALL

它也给出了第二行,我只想要带有确切单词 test1 的行。

【问题讨论】:

  • 应该是grep -e '(^| )test1( |$)' file吧?我对您在这里所说的“确切词”的含义感到有些困惑;因为,是的,w.test'[[:<:]]test1[[:>:]]' 模式匹配。

标签: linux shell


【解决方案1】:

试试这个:

grep -E "^test1" file

这表明以单词 test1 开头的任何内容作为第一行。现在,如果您需要在中间完成此操作,则此方法不起作用,但您对此并不十分具体。至少在给出的示例中 ^ 会起作用。

【讨论】:

  • 感谢逻辑有效,如果该词是该行的起始词。如果单词在我们正在搜索的行的中间,是否有任何选项。
  • 此 grep 也将匹配仅以 test1 开头的单词。例如测试12。无论如何,raina77ow 的注释是匹配文件开头、中间或结尾处的单词的完整正则表达式。 grep -e '(^| )test1( |$)' file
【解决方案2】:

对于您的示例,您可以在正则表达式中用^ 指定行首,用\s 指定空格

grep "^test1\s" file

这取决于您可能还需要匹配哪些其他分隔符。

【讨论】:

    【解决方案3】:

    我知道我来晚了有点,但我发现了这个问题并想回答。 word 被定义为一个字符序列并由空格分隔。 所以我认为这会起作用 grep -E '+test1|^test1' 文件


    这会搜索以 test1 开头的行或 test 前面至少有一个空格的行。抱歉,如果有人可以纠正我,我可以找到更好的方法:)

    【讨论】:

    • 它也会匹配test11。我建议使用 -w(单词 grep 选项): grep -w test1
    【解决方案4】:

    您可以将以下作为示例测试文件。

    $cat /tmp/file
    test1 ALL=ALL    
    abc test1 ALL=ALL    
      test1 ALL=ALL    
    w.test1 ALL=ALL    
    testing w.test1 ALL=ALL
    

    在正则表达式下面运行以搜索以 test1 开头的单词以及在行之间也包含单词 test1 的行。

    $ grep -E '(^|\s+)test1\b' /tmp/file   
    test1 ALL=ALL    
    abc test1 ALL=ALL   
      test1 ALL=ALL
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-16
      • 1970-01-01
      • 2020-11-12
      相关资源
      最近更新 更多