在此目录内
mael@mael-HP:~/repertoireVide$
是一个名为MySQLServe的文件,其中包含单词violon和avion:
mael@mael-HP:~/repertoireVide$ cat MySQLServ
violon avion
为什么将这些grep命令应用于当前目录
$ grep -r ^[^a]*$
$ grep -r '^[^a]*$'
没有给出任何输出?
avion
搜索中应省略^后跟[^ a] ,但参数的* $部分应接受任何其他可能结尾的单词。为什么violon
在这里被排除在外?
谢谢。
您没有得到任何结果,因为您的正则表达式^[^a]*$
(应在第二次尝试中使用单引号将其引起来)匹配仅包含非a
字符的行(或空行),并且您的文本字符串不为空,并且它确实包含一个a
。
的*
作用在前面的表达式,[^a]
在此情况下。[^a]*
将匹配零个或多个非a
字符。由于您将表达式固定在此行的开头和结尾处,因此它会拒绝包含letter的任何行a
。
要grep
查找以非开头的行a
,请使用
grep -r '^[^a]' .
请注意,不必显式地匹配整行,但是如果要这样做,请使用
grep -r '^[^a].*$' .
.*
匹配零个或多个任何字符(包括a
)。
要在输出中也获得空行(这些显然不是以开头a
):
grep -r -v '^a' .
也就是说,a
在行的开头匹配一个,然后使用反转匹配的含义-v
。这样,您一行中根本不需要任何字符(请注意,要进行匹配[^a]
,必须至少有一个字符),但是如果有一些字符,则第一个字符不应为a
。
要搜索不以开头的单词,请a
使用
grep -r -w -o '[^a][[:alpha:]]*' .
该表达式匹配以以外的其他任何内容开头a
,然后以零个或多个字母字符继续的内容。-w
GNU的选项grep
将匹配项限制为单词,并且该-o
选项要求grep
仅从每行中提取匹配的部分。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句