Refatorar código usando sed

Refatorar código usando sed

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 oldpara newquando 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 -ia opção sed do GNU se quiser alterar o arquivo no local em vez de imprimir em stdout.

AVISO: Este sedscript 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

informação relacionada