gpt4 book ai didi

perl - 使用 sed 或 perl 替换两个字符之间的多个字符

转载 作者:行者123 更新时间:2023-12-05 09:08:44 25 4
gpt4 key购买 nike

我想替换字符,例如',' 和 ';'仅在两个连续的 '[' 和 ']' 之间使用 sed 或 perl linux 命令。

输入

abcd,e%sa,@ert&,,qet|,[,,efeg,sy bh|slhg],oiuy#,[abh,ohg;,a oiu],ayba

输出

abcd,e%sa,@ert&,,qet|,[;;efeg;sy bh|slhg],oiuy#,[abh;ohg;;a oiu],ayba

我尝试创建 sed 替换命令

echo "abcd,e%sa,@ert&,,qet|,[,,efeg,sy bh|slhg],oiuy#,[abh,ohg;,a oiu],ayba" | sed 's/\[\([^]]*\),\([^[]*\)\]/\[\1;\2\]/g'

输出

abcd,e%sa,@ert&,,qet|,[,,efeg;sy bh|slhg],oiuy#,[abh,ohg;;a oiu],ayba

但它仅在每个“[”和“]”之间的子字符串中替换一次。

我在上面的 sed 命令或任何其他方式中犯了什么错误?

最佳答案

使用Perl,你可以使用

(?:\G(?!\A)|\[)[^],]*\K,

参见 a demo on regex101.com .


Perl 中这可能是:

perl -pi.bak -e 's/(?:\G(?!\A)|\[)[^],]*\K,/;/g' test.txt

关于perl - 使用 sed 或 perl 替换两个字符之间的多个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63086229/

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