Refactorizar código usando sed

Refactorizar código usando sed

¿Cómo escribo un script sed que reorganiza/refactoriza una cadena de caracteres de un archivo?

El contenido de mi archivo es:

    for(int i=0; i<old(a, 10); i++)
    {
      sum += old(c*c, i*a)
    }

Y quiero que los contenidos modificados se vean así:

    for(int i=0; i<new(10,0,a); i++)
    {
      sum += new(i*a, c*c)
    }

Respuesta1

Lo siguiente funciona con GNU sed: utiliza los marcadores de límites de palabras \<y \>para asegurarse de que solo cambie oldcuando newsea una "palabra" en sí misma y no solo incrustada como parte de una palabra 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)
    }

Utilice la opción de GNU sed -isi desea cambiar el archivo in situ en lugar de imprimirlo en la salida estándar.

ADVERTENCIA: Este sedscript cambiaráTODOapariciones de /\<old\>/en el archivo fuente. Esto puede ser mucho más de lo que deseas cambiar.

Respuesta2

ñu sed:

/bin/sed -ire \
 's!\<old\(([^)]+), *([^) ][^)]*)\)!new(\2, \1)!g' \
 *.c </dev/null

información relacionada