我试图在一个以大写或小写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 ***
答案 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