什么是查找字符串(这是由特定字符串的前面和后面的字符串),这不正确的语法不匹配特定的模式?
例如,我想利用其中的所有子开始与BEGIN_,结束与_END和其间的子串是不等于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'
Run Code Online (Sandbox Code Playgroud)
Fre*_*Foo 38
sedIIRC中没有一般否定运算符,因为对DFA的否定的正则表达式的编译需要指数时间.你可以解决这个问题
'/BEGIN_FOO_END/b; s/BEGIN_\(.*\)_END/(\1)/g'
Run Code Online (Sandbox Code Playgroud)
其中的/BEGIN_FOO_END/b意思是:如果我们找到BEGIN_FOO_END,那么分支(跳转)到sed脚本的末尾.
Htt*_*tqm 16
这个主题可能很旧,但为了完整起见,否定操作符!:
让所有不快乐成为非常快乐:
echo -e 'happy\nhappy\nunhappy\nhappy' | sed '/^happy/! s/.*/VERY HAPPY/'
Run Code Online (Sandbox Code Playgroud)
在这里找到:如何全局替换不以特定模式开头的行中的字符串