在同一行中复制部分行的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)
希望这有帮助。你真的想以三句话结束吗?