假设我有一些像
author = {Bill Catsman},
title = {{Hello} {{Cruel} {World}}}
我想要删除除第一个和最后一个括号之外的所有括号title
。我可以sed -r 's/title\ \=\ \{//2g'
删除多余的{
s,但是如何删除多余的}
s?
期望输出是
author = {Bill Catsman},
title = {Hello Cruel World}
答案1
要删除所有出现的{
或,}
只要它们是里面其他{...}
:
$ sed -E ':a; s/(\{.*)[{}](.*\})/\1\2/; ta' file
author = {Bill Catsman},
title = {Hello Cruel World}
其效果是仅保留外部花括号。
怎么运行的:
:a
这定义了一个标签
a
。s/(\{.*)[{}](.*\})/\1\2/
这将查找另一组花括号内的花括号并将其删除。
ta
如果最后代替命令对该行进行了更改,然后跳转到标签
a
并重试。