正则表达式grep ^ [^ a] * $

MaelPJ

在此目录内

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,然后以零个或多个字母字符继续的内容。-wGNU选项grep将匹配限制为单词,并且该-o选项要求grep仅从每行中提取匹配的部分。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章