谁能解释为什么这不起作用?
grep -ne '[A-Za-z]{1,30}\ [A-Z][a-z]{1,30}\W[A-Za-z]{1,30}\ [0-9]{1,30}\W[0-9]{5}\ [A-Za-z]{1,30}(\ [A-Za-z]{1,30})?' emails
答案1
首先,您使用扩展正则表达式 (ERE) 语法,例如{}
,()
和?
。添加选项-E
以使用 ERE 或进行转义{}
并()
使用反斜杠并替换?
如下:grep -ne '[A-Za-z]\{1,30\} [A-Z][a-z]\{1,30\}\W[A-Za-z]\{1,30\} [0-9]\{1,30\}\W[0-9]\{5\} [A-Za-z]\{1,30\}\( [A-Za-z]\{1,30\}\)\{0,1\}' emails
其次,您在单引号内使用反斜杠转义空格。虽然大多数实现grep
都会将其处理为简单的空格,但 posix 标准认为这是未定义的:前面带有反斜杠 ( '\' ) 的普通字符的解释是未定义的。
可能还有其他问题,但如果不知道您的文件的语法和您想要的内容,我们就无法知道grep