Me pregunto si esto es posible. Quiero reemplazar en masa un texto en varios archivos, esto no es un problema. Lo que no puedo entender, o incluso si es posible, es reemplazar el texto de una manera específica.
Por ejemplo:
String = XXXXX_name($var1);
XXXX es fijo, por lo que XXXX se reemplaza con AAAA, por ejemplo, lo cual es bastante simple. pero la parte más complicada es:
($var1);
Quiero insertar otra variable, por lo que la coincidencia sería ");"
<-- insertar antes de esto, PERO si la cadena ya tiene dos variables ($var1,$var2);
para no insertar nada.
Ahora, para agregar otra cosa, Var1 y Var2 se pueden llamar de varias maneras, por lo que la coincidencia tendría que estar if $ > 1
adentro ()
, luego no hacer nada y If $ = 1 inside ()
luego insertarse ", $var2"
antes.);
Cadena = XXXXX_name($var1);
Debería convertirse en: Cadena =YYYYY_name($var1, var2);
Respuesta1
¿Algo como esto?
$ echo 'String = XXXXX_name($var1); ' |
sed -E -e 's/XXXXX_name\((\$[[:alnum:]_]+)\);/YYYYY_name\(\1, \$var2\);/'
String = YYYYY_name($var1, $var2);
En expresiones regulares extendidas, los paréntesis sin comillas capturan la parte dentro de ellas y sed \1
devuelve la parte capturada a la parte de reemplazo.