我有以下字符串:
-----BEGIN 1_1 CERTIFICATE-----
以下序列与连字符不匹配:
grep -- "[A-Z\-\_]" file
当我删除\_
连字符匹配时:
grep -- "[A-Z\-]" file
如果我删除反斜杠,我会得到grep: Invalid range end
. 我是否使用也没关系-E/egrep
- 我得到相同的结果。
这种行为的原因是什么?
我有以下字符串:
-----BEGIN 1_1 CERTIFICATE-----
以下序列与连字符不匹配:
grep -- "[A-Z\-\_]" file
当我删除\_
连字符匹配时:
grep -- "[A-Z\-]" file
如果我删除反斜杠,我会得到grep: Invalid range end
. 我是否使用也没关系-E/egrep
- 我得到相同的结果。
这种行为的原因是什么?
将连字符与 a 匹配时
[...]
,连字符需要在其中的第一个或最后一个:如果您将连字符放在其他任何地方,它将被视为指定范围。
此外,
\
是文字 in[...]
(如果整个表达式在 shell 中被引用),所以[\-]
匹配反斜杠或连字符,并且[\-_]
可能匹配 a\
,]
,^
or (这些是ASCII 表中_
从\
to范围内的字符)。_