alpha正则表达式不会在bash中选择alpha字符

时间:2014-07-27 03:31:21

标签: regex macos unix

我在OSX 10.9.4上尝试将此python正则表达式p = "(2024 (?:(?:(?:[a-z|.]+ ?)+)) 93)"转换为Unix正则表达式以提高grep的速度。

要测试(并开始),我正在运行grep --color -e "[:alpha:]" /Volumes/USB/Corpus/MaskedContracts_Pre_N/01-01-09-Maximus-Inc-Second-Amendment.txt以尝试在文件中找到alpha个字符。我认为这将选择所有的字母字符,但它只选择其中的一些。我错过了文档中的内容(链接)吗?发生了什么事?

enter image description here

2 个答案:

答案 0 :(得分:3)

我没有使用OSX,但我的grep版本(Linux上的版本2.12)实际上会在您尝试使用-e '[:alpha:]'时返回一条非常具有描述性的消息:

  

grep:字符类语法是[[:space:]],而不是[:space:]

换句话说,语法是在括号表达式中使用[:alpha:] ,这意味着最终语法将具有嵌套括号:[[:alpha:]]

当你考虑它时,这是合乎逻辑的,因为正则表达式引擎无法消除字符类之间[:alpha:]的歧义,只有字符:, a, l, p, and h

答案 1 :(得分:2)

在你的正则表达式中:

[:alpha:]

是一个字符类,用于查找a,l,p,h,:之一,因此您会看到突出显示的字符。你真正想要的是:

grep -e '[[:alpha:]]'

此外,如果您只想在输出中匹配您匹配的字符,请尝试-o标记:

grep -oe '[[:alpha:]]'