我在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个字符。我认为这将选择所有的字母字符,但它只选择其中的一些。我错过了文档中的内容(链接)吗?发生了什么事?
答案 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:]]'