Refatorar o código usando sed

2

Como eu escrevo um script sed o rearranjo / refatoradores uma cadeia 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 se pareça com:

    for(int i=0; i<new(10,0,a); i++)
    {
      sum += new(i*a, c*c)
    }
    
por bbycakes3 02.11.2015 / 04:08

2 respostas

2

O seguinte funciona com o GNU sed - ele faz uso dos marcadores de limite de palavra \< e \> para garantir que ele altere apenas old para new quando é uma "palavra" por si só e não apenas incorporado 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 a opção -i do GNU sed se você quiser alterar o arquivo no local em vez de imprimir para o stdout.

AVISO : este script sed mudará TODAS ocorrências de /\<old\>/ no arquivo de origem. Isso pode ser muito mais do que você deseja mudar.

    
por 02.11.2015 / 04:21
2

gnu sed:

/bin/sed -ire \
 's!\<old\(([^)]+), *([^) ][^)]*)\)!new(, )!g' \
 *.c </dev/null
    
por 02.11.2015 / 07:48