2017-07-23 2 views
0

Ich habe eine Reihe von C-Quellcode-Dateien mit Aufrufen wie free(ptr). Ich möchte alle diese mit myfree(ptr) ersetzen. Ich weiß, dass die Regex (free)\(.*\) wird free übereinstimmen, aber wie ersetze ich nur die free und nicht den Teil in Klammern? Ich habe versucht, Varianten vonUnix/Linux finden und ersetzen Funktionsaufrufe in mehreren Dateien

find . -name '*.txt' |xargs perl -pi -e 's/(free)\(.*\)/(myfree)\(.*\)/g' 

Dass man free(ptr) mit myfree(.*) ersetzen endet, nicht das, was ich will. Ich denke, das ist eine häufige Frage, aber habe nichts gefunden.

+1

's/\ bfree (\ (. * \))/Myfree $ 1 /' – melpomene

Antwort

1

Versuchen

find . -name '*.txt' |xargs perl -pi -e 's/(free)(\(.*\))/myfree$2/g' 

Wir \(.*\) mit $2 ersetzt, um anzuzeigen, dass wir wollen, dass es mit der 2. Capture-Gruppe ersetzt werden.

Beachten Sie, dass wir auch \(.*\) getrennt in Klammern beilegen.

+0

Das endete damit, 'frei (test) 'in' (myfree) (test) 'zu verwandeln. Melpomenes Kommentar zum OP funktionierte jedoch. Ich denke, 'myfree' sollte nicht in Klammern stehen. – sudo

+0

@sudo ja ... Ich habe die Klammer im resultierenden Teil verpasst. Dies sollte jetzt funktionieren. –

Verwandte Themen