字符类正则表达式混淆

0 grep regular-expression

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

grep "^\s\s\s\s\s\s[[:alpha:]]" <filename>
Run Code Online (Sandbox Code Playgroud)

这不会:

grep "^[[:space:]]{6}[[:alpha:]]" <filename>
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Kus*_*nda 6

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

两种解决方案:

  1. 使用\{6\}替代,这是你如何把它写在一个基本的正则表达式。
  2. Use grep -E,它允许在grep.

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

grep -E '^ {6}[[:alpha:]]'
Run Code Online (Sandbox Code Playgroud)

有关的: