在同一行中复制部分行的Unix文本处理

在同一行中复制部分行的Unix文本处理,unix,awk,sed,Unix,Awk,Sed,[已编辑] 我有一个包含以下行的文件: codeToError[resources.ErrUndefined] = fmt.Errorf("1000: random string") 我想转换为: codeToError[resources.ErrUndefined] = fmt.Errorf("%d: random string", resources.ErrUndefined) 基本上,对于文件中的每一行,我需要将部分行复制到文件中同一行的另一个位置,并将RHS上的数字替换为%d。我显

[已编辑] 我有一个包含以下行的文件:

codeToError[resources.ErrUndefined] = fmt.Errorf("1000: random string")
我想转换为:

codeToError[resources.ErrUndefined] = fmt.Errorf("%d: random string", resources.ErrUndefined)


基本上,对于文件中的每一行,我需要将部分行复制到文件中同一行的另一个位置,并将RHS上的数字替换为%d。我显然不想复制粘贴成百上千行。我知道“sed”或“awk”可能会有帮助,但不确定如何使用。

假设数字表示为整数(包括负数), 请尝试以下操作:

sed -e 's/-\{0,1\}[0-9]\{1,\}/%d/' -e 's/\([A-Za-z]\{1,\}\[\([A-Za-z]\{1,\}\)\].\{1,\}\)/\1, \2/' file
结果:

A[xyz] = "%d: random string", xyz
A[abcd] = "%d: another random string", abcd
A[bc] = "%d: random", bc
A[bcd] = "%d: random stuff", bcd
codeToError[resources.ErrUndefined] = fmt.Errorf("%d: random string", resources.ErrUndefined)
恐怕您预期的输出在结尾有不一致的双引号 一行行,我省略了。 可以很容易地调整上面的sed命令以满足您的要求, 或者,如果您可以修复所需的输出,我将相应地更新我的答案

[编辑]

根据更新的示例,请尝试以下操作:

sed -e 's/-\{0,1\}[0-9]\{1,\}/%d/' -e 's/\([A-Za-z]\{1,\}\[\([A-Za-z]\{1,\}\)\].\{1,\}\)/\1, \2/' file
使用
sed

sed -e 's/-\{0,1\}[0-9]\{1,\}/%d/' -e 's/\([A-Za-z]\{1,\}\[\([^]]\{1,\}\)\].\{1,\}\))/\1, \2)/' file
目瞪口呆

gawk '$0 = gensub("(\\w+\\[([^]]+)][^0-9-]+)-?[0-9]+(.+)\)", "\\1%d\\3, \\2)", 1)' file
使用
Perl

perl -pe 's/(\w+\[(.+?)].+?)-?\d+(.+)\)/\1%d\3, \2)/' file
结果:

A[xyz] = "%d: random string", xyz
A[abcd] = "%d: another random string", abcd
A[bc] = "%d: random", bc
A[bcd] = "%d: random stuff", bcd
codeToError[resources.ErrUndefined] = fmt.Errorf("%d: random string", resources.ErrUndefined)

希望这有帮助。

你真的想以三句话结束吗?