gpt4 book ai didi

regex - sed 只替换最后一次匹配 - 需要匹配所有

转载 作者:行者123 更新时间:2023-12-04 01:56:07 35 4
gpt4 key购买 nike

我想用 [] 替换某一行上的所有 { },但不幸的是我只能匹配最后一次出现的正则表达式。

我有一个配置文件,其结构如下:

entry {
id 123456789
desc This is a description of {foo} and was added by {bar}
trigger 987654321
}

我有以下 sed,其中能够替换最后一个匹配“bar”但不能替换“foo”:
sed s'/\(desc.*\){\(.*\)}/\1\[\2\]/g' < filename

我将此搜索 anchor 定到包含 'desc' 的行,因为我不希望它替换每个 'entry' 块的定界大括号。

对于我的一生,我无法弄清楚如何替换所有事件。

感谢任何帮助 - 已经学习了一整天,因为担心我的角膜可能会破裂而无法阅读更多教程。

谢谢!

最佳答案

请尝试以下操作:

sed '/desc/ s/{\([^}]*\)}/[\1]/g' filename

上述命令中的搜索和替换只会对匹配正则表达式 /desc/ 的行进行。 ,但是我认为这实际上没有必要,因为 sed 一次处理一行文本,因此即使没有这个,您也不会替换“entry”块上的大括号。这意味着您可能可以将其简化为以下内容:
sed 's/{\([^}]*\)}/[\1]/g' filename

而不是 .*捕获组内部 [^}]*用于匹配除右大括号之外的所有内容,这样您就不会从第一个开头到最后一个结尾匹配。

此外,您可以只提供文件名作为 sed 的最终参数,而不是使用输入重定向。

关于regex - sed 只替换最后一次匹配 - 需要匹配所有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12626303/

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