使用grep匹配确切的字符串


63

我有一个文本文件:

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

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

grep "deiauk" file.txt

我得到这个结果:

deiauk 1611516 afsdf 765
deiauk1 sdfsfdsfs 1561 51
deiauk2 115151 5454 4

但我只需要这个:

deiauk 1611516 afsdf 765
deiauk 1611516 afsdf ddfgfgd

我知道有一个-w选择,但是然后我的弦必须达到整行。


4
你真的尝试过grep -w吗?(该选项正是为此目的而设计的,它对我有用。)-注意:该选项-x与整行匹配。
贾尼斯(Janis)2015年

“我想完全匹配deiauk / ”我只需要这个:deiauk 1611516 afsdf 765 -您需要哪个?
Alex

Answers:


127

尝试以下方法之一:

grep -w "deiauk" textfile

grep "\<deiauk\>" textfile

3
如果字符串的末尾带有破折号(-),则此脚本会将其带入结果,这是意外的。
伊维斯

正确的@Evert:单词仅包含字母字符,数字和下划线,因此,如果您使用缩写或带连字符的其他项目,则此功能将无效。
ingyhere

@Cyrus我在*对单词使用vi / vim 命令时学会了第二个。
舒瓦

它不适用于它具有的任何特殊字符,例如,org.apache.avro avro已与org.apache.avro avro+mapred(尝试过*)配合使用
Vishrant

12

尝试使用GNU grep并用以下命令标记单词边界\b

grep "\bdeiauk\b" file

输出:

德亚克1611516 afsdf 765

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


谢谢,但是为什么这对我不起作用?echo "Enter login: " $vard grep -E "$\bvard\b" file.txt
user3334375

试试grep "\b${vard}\b" file.txt
Cyrus

1
仍然不起作用:/
user3334375

您需要readread -p "Enter login: " vard; grep "\b${vard}\b" file.txt
Cyrus

7

如果您有grep支持-P(PCRE),则可以执行以下操作:

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

4
这是使用连字词的唯一答案。
ingyhere

5

根据您的实际数据,您可能会在单词后面加上空格:

grep 'deiauk ' file.txt 

如果您知道它必须在行的开头,请检查它:

grep '^deiauk ' file.txt 

可悲的是,除此以外的所有答案都是错误的。
Shatu

@Shatu谢谢!因此,让我们看看它“冒出顶峰”需要多长时间...我很好奇,因为我想为旧问题添加答案...我认为这确实可以,但是我对此表示怀疑。这对我来说很好,但实际上对读者有用。为了使这成为一个很好的例子,我是否可以请您写一条评论,总结其他答案遗漏了什么?
Volker Siegel's

(1)恭喜您达到1万名。现在,您可以看到此答案之前已经给出,并且已被删除。(2)最好根据所讲内容尽可能广泛地回答问题而不要给出仅适用于样本数据的答案。从问题中的示例数据看来,这些列之间用空格隔开-但未指定。所有其他答案也适用于制表符分隔的列。(3)通过添加,避免了tachomi(已删除)答案中的致命缺陷,^但其他所有答案都起作用……(续)
G-Man

(续)…如果字符串出现在第一个字段以外的其他字段中。(4)另外,如果“ deiauk”是最后一个字段(即,后面没有任何内容),则所有其他答案均有效。
G-Man
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.