我正在尝试在 grep 中缩写正则表达式。我需要精确匹配六个空格,后跟一个字母字符。这有效:
grep "^\s\s\s\s\s\s[[:alpha:]]" <filename>
这不会:
grep "^[[:space:]]{6}[[:alpha:]]" <filename>
我究竟做错了什么?
答案1
{6}
是一个扩展的正则表达式“绑定”,它在基本正则表达式中不起作用(它会{6}
按字面匹配)。该grep
实用程序默认使用基本正则表达式。
两种解决方案:
- 使用
\{6\}
相反,这是在基本正则表达式中编写它的方式。 - Use
grep -E
,它允许在grep
.
另外,如果您想要匹配空格(并且没有其他字符;[[:space:]]
,以及\s
在 GNU 中grep
,匹配空格、垂直/水平制表符、换页符、换行符和回车符),请使用文字空格。例如,
grep -E '^ {6}[[:alpha:]]'
有关的:
答案2
作为 Kusalananda 所说的补充,egrep
如果您不想处理该-E
标志,也可以使用。