【发布时间】:2020-11-15 01:36:16
【问题描述】:
我想替换字符,例如',' 和 ';'仅在两个连续的 '[' 和 ']' 之间使用 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 命令中犯了什么错误或任何其他方式做同样的事情?
【问题讨论】:
-
如果输入是
[,[],预期的输出是什么?请注意,,在两个连续的[和]之间。换句话说,如果括号不平衡,输出应该是什么?或者,甚至它们是平衡的,例如[,[]]?