使用shell命令替换模式中的字符串:sed,awk

sta*_*atw 0 regex bash shell awk sed

说我有这样的文本文件:

a;bc;d;{a;b;cd}
ab;cde;f;{ab;c;defg}
ab;{a;b;cd};cde;f
...
Run Code Online (Sandbox Code Playgroud)

我想用逗号替换大括号中的所有分号.替换后它将如下所示:

a;bc;d;{a,b,cd}
ab;cde;f;{ab,c,defg}
ab;{a,b,cd};cde;f
...
Run Code Online (Sandbox Code Playgroud)

我应该如何在shell命令中执行此操作?sed,awk或其他......

cho*_*oba 5

Perl救援:

perl -pe 's/({.*?})/ $1 =~ s=;=,=gr /ge' input
Run Code Online (Sandbox Code Playgroud)

问题是您的预期输出是错误的:

a;b;cd         a;b;cd
  |               |
  V               V
a,b,c,d         ab,cd
Run Code Online (Sandbox Code Playgroud)