grep:正则表达式的问题

grep:正则表达式的问题

谁能解释为什么这不起作用?

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

相关内容