【问题标题】:Extract only whole word using grep使用 grep 仅提取整个单词
【发布时间】:2013-07-11 01:27:49
【问题描述】:

我有一个大文本文件。我需要提取包含确切单词“DUSP1”的所有行。 这里是行的一个例子:

9606    ENSP00000239223 DUSP1   BLAST
9606    ENSP00000239223 DUSP1-001 Ensembl

我想检索第一行而不是第二行。

我尝试了几个命令:

grep -E "^DUSP1"
grep '\<DUSP1\>'
grep '^DUSP1$'
grep -w DUSP1

但它们似乎都不起作用。我应该使用哪个选项?

【问题讨论】:

  • “确切的词”是如何定义的?而你的第三个例子只会找到只有单词 "DUSP1" 的行......所以你想要 "^DUSP1[[:space:]]+" 的行?
  • 您能否提供示例文件内容。第 2、3、4 个命令对我有用。

标签: regex grep match exact-match


【解决方案1】:

您面临的问题是 破折号 (-) 被 grep 视为单词分隔符。

你应该试试这个命令:

grep '\sDUSP1\s' file

以确保您的单词周围有空格。
或者使用单词边界

grep '\bDUSP1\b' file

【讨论】:

    【解决方案2】:

    如果你想准确地 grep 整个单词,你可以像这样使用单词边界:

    grep '\bDUSP1\b'
    

    这匹配开头和结尾的确切单词。

    【讨论】:

    • 这应该是公认的答案,前后不总是有空格(最后一个字怎么办?)。
    • 这很棒。它还匹配setting=DUSP1my/folder/to/DUSP1,但不匹配DUSP123
    • 我不得不为 Windows 版本的 GNU grep 使用双引号。单引号不起作用。
    • 是的,这应该是带有大绿色复选标记的答案。 :D
    • 这对我来说仍然是 DUSP1-001
    【解决方案3】:

    除了 sputpick 所说的,它可能是这样,或者:

    grep '\sDUSP1$' file 
    

    如果 DUSP1 是行尾。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-22
      • 1970-01-01
      • 1970-01-01
      • 2016-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-25
      相关资源
      最近更新 更多