字符类正则表达式混淆

字符类正则表达式混淆

我正在尝试在 grep 中缩写正则表达式。我需要精确匹配六个空格,后跟一个字母字符。这有效:

grep "^\s\s\s\s\s\s[[:alpha:]]" <filename>

这不会:

grep "^[[:space:]]{6}[[:alpha:]]" <filename>

我究竟做错了什么?

答案1

{6}是一个扩展的正则表达式“绑定”,它在基本正则表达式中不起作用(它会{6}按字面匹配)。该grep实用程序默认使用基本正则表达式。

两种解决方案:

  1. 使用\{6\}相反,这是在基本正则表达式中编写它的方式。
  2. Use grep -E,它允许在grep.

另外,如果您想要匹配空格(并且没有其他字符;[[:space:]],以及\s在 GNU 中grep,匹配空格、垂直/水平制表符、换页符、换行符和回车符),请使用文字空格。例如,

grep -E '^ {6}[[:alpha:]]'

有关的:

答案2

作为 Kusalananda 所说的补充,egrep如果您不想处理该-E标志,也可以使用。

相关内容