【发布时间】:2013-02-19 19:58:57
【问题描述】:
我正在使用 GNU sed 版本 4.2.1,并且我正在尝试编写一个非贪婪的 SED 正则表达式来提取一个由其他两个字符串分隔的字符串。当分隔字符串是单字符时,这很容易:
s:{\([^}]*\)}:\1:g
在该示例中,字符串由左侧的“{”和右侧的“}”分隔。
如果分隔字符串是多个字符,比如 '{{{' 和 '}}}' 我可以像这样调整上面的表达式:
s:{{{\([^}}}]*\)}}}:\1:g
所以中心表达式匹配任何不包含 '}}}' 结束字符串的内容。但这仅在匹配字符串根本不包含 '}' 时才有效。比如:
{{{cannot match {this broken} example}}}
不会起作用,但是
{{{can match this example}}}
确实有效。当然
s:{{{\(.*\)}}}:\1:g
总是有效,但很贪心,因此不适合在同一行出现多个模式的情况。
我理解 [^a] 表示除 a 和 [^ab] 之外的任何内容排除 3 个连续字符的序列。
那么我如何为 SED 编写一个正则表达式来匹配一个由其他两个字符串分隔的字符串?
【问题讨论】: