![Refatorar código usando sed](https://rvso.com/image/76408/Refatorar%20c%C3%B3digo%20usando%20sed.png)
Como escrevo um script sed que reorganiza/refatora uma sequência de caracteres de um arquivo?
O conteúdo do meu arquivo é:
for(int i=0; i<old(a, 10); i++)
{
sum += old(c*c, i*a)
}
E quero que o conteúdo modificado fique assim:
for(int i=0; i<new(10,0,a); i++)
{
sum += new(i*a, c*c)
}
Responder1
O seguinte funciona com o GNU sed
- ele faz uso dos marcadores de limite de palavra \<
e \>
para garantir que só mude old
para new
quando for uma "palavra" por si só e não apenas incorporada como parte de uma palavra como cold
.
$ sed -e 's/\<old\>/new/g' foo.c
for(int i=0; i<new(a, 10); i++)
{
sum += new(c*c, i*a)
}
Use -i
a opção sed do GNU se quiser alterar o arquivo no local em vez de imprimir em stdout.
AVISO: Este sed
script mudaráTODOSocorrências de /\<old\>/
no arquivo de origem. Isso pode ser muito mais do que você deseja mudar.
Responder2
gnu sed:
/bin/sed -ire \
's!\<old\(([^)]+), *([^) ][^)]*)\)!new(\2, \1)!g' \
*.c </dev/null