Grep模式匹配用双引号括起来的小写字符串

Bur*_*rad 9 regex string grep

我有一点grep的问题,我似乎无法弄明白.我正在尝试搜索一组源文件中用双引号(C字符串)括起来的小写单词的所有实例.使用bash和gnu grep:

grep -e '"[a-z]+"' *.cpp
Run Code Online (Sandbox Code Playgroud)

给我没有比赛,而

grep -e '"[a-z]*"' *.cpp
Run Code Online (Sandbox Code Playgroud)

给我像"Abc"这样的比赛,这不仅仅是小写字符.什么是正确的正则表达式只匹配"abc"?

Don*_*art 8

你忘了逃避元字符.

grep -e '"[a-z]\+"'
Run Code Online (Sandbox Code Playgroud)

对于第二部分,它匹配多案例字符的原因是因为您的语言环境.如下:

$ echo '"Abc"' | grep -e '"[a-z]\+"'
"Abc"
$ export LC_ALL=C
$ echo '"Abc"' | grep -e '"[a-z]\+"'
$
Run Code Online (Sandbox Code Playgroud)

要获得"类似ascii"的行为,您需要将您的语言环境设置为"C",如grep手册页中所指定:

在括号表达式中,范围表达式由两个用连字符分隔的字符组成.它匹配使用区域设置的整理顺序和字符集在两个字符之间进行排序的任何单个字符.例如,在默认的C语言环境中,[ad]等同于[abcd].许多语言环境按字典顺序对字符进行排序,在这些语言环境中[ad]通常不等同于[abcd]; 例如,它可能等同于[aBbCcDd].要获得括号表达式的传统解释,可以通过将LC_ALL环境变量设置为值C来使用C语言环境.