使用 grep 匹配精确的字符串

use*_*375 107 grep

我有一个文本文件:

deiauk 1611516 afsdf 765
minkra 18415151 asdsf 4152
linkra sfsfdsfs sdfss 4555
deiauk1 sdfsfdsfs 1561 51
deiauk2 115151 5454 4
deiauk 1611516 afsdf ddfgfgd
luktol1 4545 4 9
luktol 1
Run Code Online (Sandbox Code Playgroud)

我想完全匹配deiauk。当我这样做时:

grep "deiauk" file.txt
Run Code Online (Sandbox Code Playgroud)

我得到这个结果:

deiauk 1611516 afsdf 765
deiauk1 sdfsfdsfs 1561 51
deiauk2 115151 5454 4
Run Code Online (Sandbox Code Playgroud)

但我只需要这个:

deiauk 1611516 afsdf 765
deiauk 1611516 afsdf ddfgfgd
Run Code Online (Sandbox Code Playgroud)

我知道有一个-w选项,但是我的字符串必须整行。

Jan*_*nis 185

尝试以下之一:

grep -w "deiauk" textfile

grep "\<deiauk\>" textfile
Run Code Online (Sandbox Code Playgroud)

  • 如果在字符串末尾有一个破折号 (**-**),这个脚本将把它作为结果,这是意料之外的。 (6认同)
  • @Evis 改用`grep -w "deiauk$" 文本文件`。 (3认同)

Cyr*_*rus 22

用 GNU 试试这个grep并用以下标记单词边界\b

grep "\bdeiauk\b" file
Run Code Online (Sandbox Code Playgroud)

输出:

德约克 1611516 美国空军 765

请参阅:http : //www.regular-expressions.info/wordboundaries.html

  • 仍然不起作用:/ (2认同)

hee*_*ayl 14

如果您grep支持-P(PCRE),您可以:

$ grep -P '(^|\s)\Kdeiauk(?=\s|$)' file.txt 
deiauk 1611516 afsdf 765
deiauk 1611516 afsdf ddfgfgd
Run Code Online (Sandbox Code Playgroud)

  • 这是唯一适用于带连字符的单词的答案。 (8认同)

Vol*_*gel 8

根据您的真实数据,您可以查找后跟空格的单词:

grep 'deiauk ' file.txt 
Run Code Online (Sandbox Code Playgroud)

如果您知道它必须位于行首,请检查它:

grep '^deiauk ' file.txt 
Run Code Online (Sandbox Code Playgroud)