Im Grunde genau, wie Sie gesagt haben, es sei denn ...
Dies ist eine jener Fragen, bei denen die richtige Antwort ist wahrscheinlich „Hier ist, wie die dumme Sache zu tun BITTE Sie fragen zu tun, aber bitte wirklich sagen, uns, was dein wirkliches Problem ist, das du zu lösen versuchst, weil das mit ziemlicher Sicherheit nicht der richtige Weg ist. "
Zuerst sollte die Suchzeichenfolge sein (das ist für vim, weil ich das Tag vim sehe. Wenn Sie es mit einer anderen Ersatzregex-Sache machen wollen, lassen Sie uns wissen, welche. Perl, php, sed, awk, die bash-Kommandozeile, etwas):
:%s/\bcheck_free_set_to_null\(([^()]+)\)/ replacement text goes here /g
das vermutet (möglicherweise falsch), dass es nie irgendwelche Klammern innerhalb der Funktion - wenn dies der Fall sein könnte, dann in Sie wagen rekursive regulären Ausdruck Gebiet und in? In diesem Fall machst du auf jeden Fall das Falsche.
Ihr Ersatz-String sollte sein, was auch immer Ihre Methode enthalten wird - in Ihrem Beispiel, würde es sein:
:%s/\bcheck_free_set_to_null(\([^()]+\))/if (\1)\n{\n free(\1)\n printf("freed")\n}\nelse\n{\n printf("could not free")\n return (\1)\n}/g
Hier wir \ n für Zeilenende verwenden, weil Sie vi verwenden, so Sie sind wahrscheinlich auf einer Art Unix, und so haben sie ihre Zeilenenden.
Jetzt gibt es eine Sache, die wir hier verbessern könnten. Vertiefung.
:%s/\(\s+\)\(.*\)\bcheck_free_set_to_null(\([^()]+\))/\1\2if (\3)\n\1{\n\1 free(\3)\n\1 printf("freed")\n\1}\nelse\n{\n\1 printf("could not free")\n\1 return (\3)\n\1}/g
Hier packe ich den Einzug in \1
, alles andere auf der Linie in \2
, und die Methodenparameter in \3
. Was könnte Sie ein bisschen hübscher machen lassen.
Aber noch einmal: Was auch immer Sie hier versuchen, ist wahrscheinlich die falsche Sache zu tun. Sag uns, was das REALE Problem ist! Mach es nicht so! Dieser Weg ist SCHLECHT! DIESE WEISE HAT WEASELS UND ROACHES IN IT! UND DIE WEASEL WERDEN NICHT AUCH DIE RACHEN FÜR SIE ESSEN!
Ich denke, Sie haben diese Frage richtig geschrieben? – dlmeetei
Ja, mit anderen Tags, so kann ich tatsächlich eine Antwort bekommen :) – user6714088