man*_*tor 2 grep regular-expression
我有以下字符串:
-----BEGIN 1_1 CERTIFICATE-----
Run Code Online (Sandbox Code Playgroud)
以下序列与连字符不匹配:
grep -- "[A-Z\-\_]" file
Run Code Online (Sandbox Code Playgroud)
当我删除\_连字符匹配时:
grep -- "[A-Z\-]" file
Run Code Online (Sandbox Code Playgroud)
如果我删除反斜杠,我会得到grep: Invalid range end. 此外,我是否使用也无关紧要-E/egrep- 我得到了相同的结果。
这种行为的原因是什么?
将连字符与 a 匹配时[...],连字符需要在其中的第一个或最后一个:
grep '[A-Z_-]' ...
Run Code Online (Sandbox Code Playgroud)
如果您将连字符放在其他任何位置,它将被视为指定范围。
此外,\是字面量 in [...](如果整个表达式在 shell 中被引用),因此[\-]匹配反斜杠或连字符,并且[\-_]可能匹配\, ],^或_(这些是ASCII 表中范围从\到_的字符)。