gpt4 book ai didi

regex - 用 sed 删除大括号对之间的所有内容

转载 作者:行者123 更新时间:2023-12-01 05:32:36 25 4
gpt4 key购买 nike

我有一个看起来像这样的字符串:

[%{%B%F{blue}%}master %{%F{red}%}*%{%f%k%b%}%{%f%k%b%K{black}%B%F{green}%}]

我想删除匹配 %{...} 的子字符串, 可能包含也可能不包含相同顺序的其他子字符串。

我应该得到: [master *]作为最终输出。我到目前为止的进展:
gsed -E 's/%\{[^\}]*\}//g'

这使:
echo '[%{%B%F{blue}%}master %{%F{red}%}*%{%f%k%b%}%{%f%k%b%K{black}%B%F{green}%}]' | gsed -E 's/%\{[^\}]*\}//g'
[%}master %}*%B%F{green}%}]

所以,这适用于 %{...}不包含 %{...} 的部分.它对于像 %{%B%F{blue}%} 这样的字符串失败(它返回 %} )。

我想要做的是解析字符串,直到找到匹配的 } ,然后删除到该点的所有内容,而不是删除 %{ 之间的所有内容和第一个 }我遇到。我不知道该怎么做。

我完全意识到可能有多种方法可以做到这一点;如果可能的话,我更喜欢关于问题中指定方式的答案,但任何想法都非常受欢迎。

最佳答案

这可能对你有用:

echo '[%{%B%F{blue}%}master %{%F{red}%}*%{%f%k%b%}%{%f%k%b%K{black}%B%F{green}%}]' |
sed 's/%{/{/g;:a;s/{[^{}]*}//g;ta'
[master *]

关于regex - 用 sed 删除大括号对之间的所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10558826/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com