bash reemplazando texto en cadena con comodín sed/regnex

bash reemplazando texto en cadena con comodín sed/regnex

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 $ > 1adentro (), 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 \1devuelve la parte capturada a la parte de reemplazo.

información relacionada