加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式 – 删除sed对括号之间的所有内容

发布时间:2020-12-14 05:46:55 所属栏目:百科 来源:网络整理
导读:我有一个看起来像这样的字符串: [%{%B%F{blue}%}master %{%F{red}%}*%{%f%k%b%}%{%f%k%b%K{black}%B%F{green}%}] 我想删除匹配%{…}的子字符串,这些子字符串可能包含也可能不包含相同顺序的其他子字符串. 我应该得到:[master *]作为最终输出.我到目前为止
我有一个看起来像这样的字符串:

[%{%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 *]

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读