Sed非贪婪的花括号匹配

Ces*_*sar 0 regex sed non-greedy

我在文件a.txt中有一个字符串

{moslate}alho{/moslate}otra{moslate}a{/moslate}

需要otra使用sed 获取字符串.

有了这个正则表达式

sed 's|{moslate}.*{/moslate}||g' a.txt

a根本没有输出,但是当我添加?到正则表达式时

s|{moslate}.*?{/moslate}||g a.txt

(我在某处读到它使正则表达式非贪婪)我根本得不到匹配,我的意思是得到以下输出

{moslate}alho{/moslate}otra{moslate}a{/moslate}

如何使用sed获得所需的输出?

swe*_*rup 6

SED不支持非贪婪匹配,所以你需要通过使它接受的选择更加贪婪来使'.*'术语变得贪婪.我没有你正在寻找的那种东西的语料库,但我会假设你不想找到任何带嵌入式花括号的东西.如果是这样,那么你可以使用:

sed 's|{moslate}[^{]*{/moslate}||g' a.txt
Run Code Online (Sandbox Code Playgroud)

这将适用于您提供的情况,但如果这些东西嵌套将会失败.