Предполагая, что числа представлены в виде целых чисел (включая отрицательные числа), попробуйте следующее:
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
Боюсь, ваш ожидаемый результат не соответствуетдвойные кавычки в конце строк, которые я пропустил.Будет легко настроить приведенную выше команду sed для удовлетворения ваших требований, или, если вы сможете исправить желаемый результат, я соответствующим образом обновлю свой ответ.
[EDIT]
В соответствии с обновленным примером, попробуйте следующее:
С sed
:
sed -e 's/-\{0,1\}[0-9]\{1,\}/%d/' -e 's/\([A-Za-z]\{1,\}\[\([^]]\{1,\}\)\].\{1,\}\))/\1, \2)/' file
С gawk
:
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
Результат:
codeToError[resources.ErrUndefined] = fmt.Errorf("%d: random string", resources.ErrUndefined)
Надеюсь, это поможет.