我正在使用 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 个连续字符序列的正确方法。a
b
[^}}}]
那么如何为 SED 编写一个匹配一个由其他两个字符串分隔的字符串的正则表达式?