我有一个文件
cat /tmp/b
A
Quick
Brown
Fox
Killed
2 Hens
如果我在[0-9]
上匹配,那么我得到预期的
cat /tmp/b | grep "[0-9]"
2 Hens
但如果我尝试在数字字符类上匹配,我会得到意想不到的
cat /tmp/b | grep "d"
Killed
无论我认为什么组合的东西可能有效,这种情况都会继续。我尝试
cat /tmp/b | grep "\d"
Killed
cat /tmp/b | grep "\d"
Killed
cat /tmp/b | grep "\\d"
{No matches}
cat /tmp/b | grep "\d"
{No matches}
cat /tmp/b | grep "[\d]"
Killed
cat /tmp/b | grep "[d]"
Killed
cat /tmp/b | grep "[\\d]"
Killed
有人知道我做错了什么吗?以及如何让Character Classed在cygwin sed 中工作吗
更新
cat /tmp/b | grep [:digit]
Quick
Killed
更新2
cat /tmp/b | grep [[:digit:]]
2 Hens
您错误地指定了字符类。手册会告诉你:
- 括号表达式是由
[
和]
包围的字符列表 - 某些命名的字符类是在括号表达式中预定义的:
[:digit:]
位数:0 1 2 3 4 5 6 7 8 9
这意味着为了匹配[:digit:]
,您需要说[[:digit:]]
。
你会发现:
$ cat input | grep -o '[[:digit:]]'
2
我很确定cygwin使用了GNU grep regex,它不支持d
缩写,但支持[:digit:]
。顺便说一句,如果在字符类括号外的d
前面有多个反斜杠,我无法解释为什么要匹配d
。