Regex grep中的两个交替正则表达式

Regex grep中的两个交替正则表达式,regex,linux,open-source,grep,Regex,Linux,Open Source,Grep,怎么了?文档(手册页)说|是交替操作员。从手册页: 交替 两个正则表达式可以由中缀运算符|连接;生成的正则表达式匹配与任一替代表达式匹配的任何字符串 你误解了这一点,这并不是说是交替运算符,意思是|是交替运算符,分号分隔句子的两部分 此外,除非您使用扩展正则表达式选项(-E),否则您需要转义|: 基本正则表达式与扩展正则表达式 在基本正则表达式中,元字符?、+、{、|、(、和)失去了它们的特殊含义;而是使用反斜杠版本\?、\+、\{、\(、和\) 最终结果可能如下所示: '^\{[a-z]*:[

怎么了?文档(手册页)说|是交替操作员。

从手册页:

交替
两个正则表达式可以由中缀运算符|连接;生成的正则表达式匹配与任一替代表达式匹配的任何字符串

你误解了这一点,这并不是说是交替运算符,意思是
|
是交替运算符,分号分隔句子的两部分

此外,除非您使用扩展正则表达式选项(
-E
),否则您需要转义
|

基本正则表达式与扩展正则表达式 在基本正则表达式中,元字符?、+、{、|、(、和)失去了它们的特殊含义;而是使用反斜杠版本\?、\+、\{、\(、和\)

最终结果可能如下所示:

'^\{[a-z]*:[0-9]*\}$|;^[a-z]=[0-9]$' 
或不带
-E
选项:

grep -E '^\{[a-z]*:[0-9]*\}$|^[a-z]=[0-9]$' some_file

在询问问题之前,您可能想告诉我们有关症状的信息:)您确定开头前面有一个分号“
”^
”吗?错误的意思是为什么不起作用……根据MAN的说法,它应该是|;所以是的,我是sure@Gumbo
^
仅具有特殊含义(作为锚链的起点)当它位于正则表达式的开头时(或紧跟在替换/或运算符
|
之后).
;^
将匹配字符串中的这两个字符,例如,将匹配“text;^more stuff”行注意:这不是原始问题的一部分,但如果替换仅用于正则表达式的某一部分,则可以将其分组为“\(”和“\”)。事实上,可以重构正则表达式以消除一些冗余。
^
$
:“^\(\{[a-z]*:[0-9]*\}}|[a-z]=[0-9]\)$”(省去分号错误)。在这种情况下这并不多,但对于其他正则表达式来说可能是巨大的。
grep '^{[a-z]*:[0-9]*}$\|^[a-z]=[0-9]$' some_file