在UNIX中使用带有通配符的grep

时间:2017-08-29 21:37:30

标签: unix grep special-characters

我试图在一个以大写或小写d开头的文件中找到一个5个字母的单词,后跟一个元音,并以小写s结尾。只要符合5个字母的限制,该单词也可以包含特殊字符。这是我提出的命令和工作,除了一个不符合要求的条目。它返回“Doris's”,这是一个6个字符的单词。有人可以给我一些关于我做错的方向吗?我在网上搜索过,找不到与此有关的任何内容。

$ adb shell uname -a Linux localhost 4.1.33-06697-g59c7fe0c8372 #1 SMP PREEMPT Fri Aug 18 02:48:05 UTC 2017 armv7l things_5.1]$ adb shell dumpsys meminfo *** SERVICE 'meminfo' DUMP TIMEOUT (10s) EXPIRED ***

1 个答案:

答案 0 :(得分:0)

什么" grep"正在这样做,你不会意识到它打印了所有包含" Doris"作为一个整体来说,它是否先于或后跟任何东西。

所以它看到" Doris"并且因为它包含了整个单词" Doris",它打印出来。

它还会打印出这条线"我爱Doris,他正在吃饼干#34;因为它还包含" Doris"总而言之。

要获得所需的行为,请添加" ^"和" $"你的正则表达式,像这样:

grep -w '^[dD][aeiouy]..[s]$' /usr/share/dict/words

确保" Doris"如果它是该行中唯一的文本,则仅匹配。

但是,如果你正在寻找一个"单词"文件(每行一个字),你真的不需要grep" -w"切换,因为它已经(几乎)每行一个字。

所以试试这个:

grep '^[dD][aeiouy]..[s]$' /usr/share/dict/words

注意:如果' ^'和' $'不会为你工作,尝试更换" grep"与" egrep",像这样:

egrep '^[dD][aeiouy]..[s]$' /usr/share/dict/words