![Refactorizar código usando sed](https://rvso.com/image/76408/Refactorizar%20c%C3%B3digo%20usando%20sed.png)
¿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 old
cuando new
sea 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 -i
si desea cambiar el archivo in situ en lugar de imprimirlo en la salida estándar.
ADVERTENCIA: Este sed
script 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