【问题标题】:Two regular expressions in grep with alternationgrep中的两个正则表达式与交替
【发布时间】:2012-03-29 16:50:46
【问题描述】:
'^\{[a-z]*:[0-9]*\}$|;^[a-z]=[0-9]$' 

怎么了?文档(手册页)说 |是交替运算符。

【问题讨论】:

  • 您可能想在问问题之前告诉我们症状:)
  • 你确定;^,开头前面的分号吗?
  • what's wrong 表示为什么不起作用...
  • 根据 MA​​N 应该是 |;所以是的,我确定
  • @Gumbo ^ 仅在正则表达式的开头(或紧跟在备用/或运算符| 之后)具有特殊含义(作为行锚的开头)。 ;^ 将匹配字符串中的这两个字符,例如将匹配行'文本;^更多的东西'

标签: regex linux open-source grep


【解决方案1】:

来自手册页:

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

你误解了这个,不是说|;是交替运算符,而是说|是交替运算符,分号分隔句子的两个部分。

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

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

最终结果可能如下所示:

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

或者没有-E 选项:

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

【讨论】:

  • 注意:这不是原始问题的一部分,但是如果仅对正则表达式的某些部分进行交替,则可以将其与“\(”和“\)”分组。实际上,可以重构正则表达式以消除一些冗余。 ^$: '^\(\{[a-z]*:[0-9]*\}|[a-z]=[0-9]\)$' (省略分号错误)。在这种情况下它并不多,但对于其他正则表达式来说它可能很大。
猜你喜欢
  • 1970-01-01
  • 2014-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多