sed
solution. Talvez seja muito complicado e não é ideal, mas funciona. Como um experimento:).
Ele faz todas as substituições na chamada sed
executando a única sequência de comando grande gerada pelo printf
e paste
usage. Eu queria dividir esse comando para a multilinha por legibilidade, mas não consegui - ele parou de funcionar. Então - o oneliner:
sed -i -r "$(paste -d'/' <(printf 's/%s\b\n' G{1..229}) <(printf '%s/g\n' G{230..458}))" file.txt
Ele está convertendo para o seguinte comando sed
:
sed -i -r "s/G1\b/G230/g
s/G2\b/G231/g
s/G3\b/G232/g
s/G4\b/G233/g
...
s/G227\b/G456/g
s/G228\b/G457/g
s/G229\b/G458/g" file.txt
Explicação
-
sed -i -r "$(
-
paste -d'/'
- une as partes esquerda e direita (que são geradas em 3,4 etapas) pela barra -/
e o resultado é este:s/G1\b/G230/g
-
<(printf 's/%s\b\n' G{1..229})
- faz partes da esquerda do comandosed
substitute. Exemplo:s/G1\b
,s/G2\b
,s/G3\b
, etc.-
\b
- Corresponde a um limite de palavra; ou seja, se o caractere à esquerda for um caractere de “palavra” e o caractere à direita for um caractere de “não-palavra” ou vice-versa. Informações - extensões de expressões regulares do GNU sed.
-
-
<(printf '%s/g\n' G{230..458})
- faz partes certas do comandosed
substitute. Exemplo:G230/g
,G231/g
,G232/g
, etc. -
)" file.txt
- arquivo de entrada.
Teste
Entrada
var G1 = value;
G3 = G1 + G2;
G3 = G1 + G2
G3 = ${G1} + G2
var G2 = value;
var G3 = value;
G224 = G3 + G215;
G124 = G124 + G215;
G124 = G124 + G12;
var G4 = value;
var G5 = value;
var G6 = value;
var G59 = value;
var G60 = value;
var G156 = value;
var G227 = value;
var G228 = value;
var G229 = value;
Resultado
var G230 = value;
G232 = G230 + G231;
G232 = G230 + G231
G232 = ${G230} + G231
var G231 = value;
var G232 = value;
G453 = G232 + G444;
G353 = G353 + G444;
G353 = G353 + G241;
var G233 = value;
var G234 = value;
var G235 = value;
var G288 = value;
var G289 = value;
var G385 = value;
var G456 = value;
var G457 = value;
var G458 = value;