Cygwin Regex Shorthand字符类无法匹配



我有一个文件

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

相关内容

  • 没有找到相关文章

最新更新