Ich frage mich, ob das möglich ist. Ich möchte einen Text in mehreren Dateien stapelweise ersetzen. Das ist kein Problem. Was ich nicht herausfinden kann oder ob es überhaupt möglich ist, ist, den Text auf eine bestimmte Weise zu ersetzen.
Zum Beispiel:
String = XXXXX_name($var1);
XXXX ist festgelegt, ersetzen Sie XXXX also beispielsweise durch YYYY. Das ist ganz einfach. Der kompliziertere Teil ist jedoch:
($var1);
Ich möchte eine weitere Variable einfügen, daher wäre die Übereinstimmung ");"
<-- davor einfügen, ABER wenn die Zeichenfolge bereits zwei Variablen enthält, ($var1,$var2);
soll nichts eingefügt werden.
Um nun noch etwas hinzuzufügen: Var1 und Var2 können verschiedene Namen haben, daher müsste das Match if $ > 1
darin enthalten sein ()
, um nichts zu tun, und dann davor If $ = 1 inside ()
einzufügen .", $var2"
);
String = XXXXX_name($var1);
Sollte werden: String =YYYYY_name($var1, var2);
Antwort1
Etwas wie das?
$ echo 'String = XXXXX_name($var1); ' |
sed -E -e 's/XXXXX_name\((\$[[:alnum:]_]+)\);/YYYYY_name\(\1, \$var2\);/'
String = YYYYY_name($var1, $var2);
In erweiterten regulären Ausdrücken erfassen die nicht in Anführungszeichen gesetzten Klammern den darin enthaltenen Teil, und sed \1
fügt den erfassten Teil wieder in den Ersatzteil ein.