Pelo que entendi, o problema é que você tem um conjunto de padrões de sintaxe para combinar e, de forma independente, muitos números possíveis que precisam ser traduzidos, e você precisa "multiplicar" esses números juntos. O seguinte pode ser um mecanismo sed
adequado, supondo alguma simplificação: no seu sed
use primeiro os padrões para corresponder às linhas e, em seguida, use a conversão do número nessas linhas. Por exemplo, crie um arquivo sedscript
holding
/merchantId:\s*("|')[0-9]+("|')/b change
/private static String MERCHANT_ID\s*=\s*("|')[0-9]+("|')/b change
b
:change
s/["']1234["']/ConstantMerchants.MERCHANT_A/
s/["']1235["']/ConstantMerchants.MERCHANT_B/
Começa com cada um dos seus padrões, seguido pelo comando b change
, o que significa ramificar para o rótulo change
quando o padrão é encontrado. A lista de padrões termina com o comando b
, o que significa ramificar até o final, ou seja, seguir em frente para ler a próxima linha de entrada do arquivo.
O :change
significa que esse é o rótulo change
para o qual nos direcionamos. Em seguida, segue cada um dos seus possíveis números para nomear traduções. A simplificação é assumir que apenas um número entre aspas aparecerá na linha, para que possamos ignorar qual padrão real correspondeu. Se houver algumas exceções, pode valer a pena manipulá-las manualmente.
Em um sistema Unix (eu não sei sobre windows) você pode usar este shell script para editar os arquivos:
find dir -type f |
xargs sed -i -r -f sedscript
O -i
edita os arquivos no local, então sempre começa copiando os arquivos para um novo diretório dir
, em seguida, executa este comando na cópia e usa diff -ru
entre os dois diretórios para verificar se está fazendo o que você deseja. O -r
é necessário (no Unix) para que o GNU sed aceite (a|b)
em vez do padrão usual \(a\|b\)
.