【发布时间】:2012-02-21 14:40:18
【问题描述】:
查找不与特定模式匹配的子字符串(前后为特定字符串的字符串)的正确语法是什么?
例如,我想获取所有 以BEGIN_ 开始,以_END 结束 并且中间的子字符串 not 的子字符串强>等于FOO;并用格式“(inner substring)”替换整个子字符串。以下将匹配:
-
BEGIN_bar_END->(bar) -
BEGIN_buz_END->(buz) -
BEGIN_ihfd8f398IHFf9f39_END->(ihfd8f398IHFf9f39)
但BEGIN_FOO_END 不匹配。
我尝试过以下方法,但似乎找不到正确的语法:
sed -e 's/BEGIN_(^FOO)_END/($1)/g'
sed -e 's/BEGIN_([^FOO])_END/($1)/g'
sed -e 's/BEGIN_(?!FOO)_END/($1)/g'
sed -e 's/BEGIN_(!FOO)_END/($1)/g'
sed -e 's/BEGIN_(FOO)!_END/($1)/g'
sed -e 's/BEGIN_!(FOO)_END/($1)/g'
【问题讨论】:
-
注意,在处理整行时,可以使用
!:grymoire.com/Unix/Sed.html#uh-32