我有一个文件
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
有谁知道我做错了什么以及如何让字符Classed在cygwin sed中工作
更新
cat /tmp/b | grep [:digit]
Quick
Killed
更新2
cat /tmp/b | grep [[:digit:]]
2 Hens
答案 0 :(得分:3)
您正在错误地指定字符类 。 manual会告诉你:
[
和]
[:digit:]
数字:0 1 2 3 4 5 6 7 8 9. 这意味着为了匹配[:digit:]
您需要说[[:digit:]]
。
你会发现:
$ cat input | grep -o '[[:digit:]]'
2
答案 1 :(得分:0)
我很确定cygwin使用GNU grep regex,它不支持\d
缩写,但支持[:digit:]
。顺便说一句,我无法解释为什么在字符类括号外d
之前有多个反斜杠的情况下匹配d
。