多个匹配模式内的字符替换

时间:2017-11-08 07:21:01

标签: regex bash shell awk sed

假设我有一个这样的句子

FRw3kfdpHKD4Ms2O3hmaEoD4Gqp5onwF/OUkkp5zSVDsYnJ9Bej8f6kRewoZ/WBZuJIKy8qAUmhi
6qLwK063quA4JKE96Ne6bACIcmkj+boWLoE5TsE3zus4Y8vdwhzsT3Hi9qBjjvmE7IV/LILNQizH
ELp8fdbpGBwwRNlncAQ=

我想将括号The quick, (brown, fox) jumps over, the (lazy, old, dog) 中的所有逗号,替换为冒号(),但不应替换括号中未包含的逗号。输出应该像

:

请注意,每个句子中都没有修复逗号和括号的数量。 如何使用shell相关工具(bash,sed,awk等)来实现这个结果?

我尝试使用The quick, (brown: fox) jumps over, the (lazy: old: dog) 替换所有匹配的组,但不确定如何将结果插回到原始句子。

1 个答案:

答案 0 :(得分:2)

如果您的实际Input_file与显示的输入相同,那么以下内容可能对您有帮助。

awk -F"[)(]" '{for(i=2;i<=NF;i+=2){gsub(/,/,":",$i);$i="("$i")"}} 1'  Input_file

输出如下。

The quick,  (brown: fox)  jumps over, the  (lazy: old: dog)