Andere Lösungen mischen Regex-Syntax. Um perl/PCRE-Muster für sowohl Suchen und Ersetzen, und vermeiden Sie jede Datei der Verarbeitung, das funktioniert ganz gut:
grep -rlZP 'match1' | xargs -0r perl -pi -e 's/match2/replace/g;'
wo match1
und match2
in der Regel identisch sind, aber match1
vereinfacht werden kann erweiterte Funktionen zu entfernen, sind nur für die Substitution relevant, z Gruppen erfassen.
Übersetzung: grep rekursiv und Liste übereinstimmende Dateien, getrennt durch Null zum Schutz von Sonderzeichen im Dateinamen, die diese PCRE-Muster entsprechen, dann Pipe diese Dateinamen zu Xargs, die eine leere Liste erwartet, aber nicht tue alles, wenn keine Namen empfangen werden, und erhalte perl, um jede Datei neu zu schreiben, wobei Zeilen ersetzt werden, in denen Übereinstimmungen gefunden werden.
Fügen Sie die I
Option zu grep
hinzu, um auch Binärdateien zu ignorieren.
Ich glaube nicht, Grep kann dies tun (ich könnte falsch liegen). Einfachere Methoden wären die Verwendung von sed oder perl zum Ersetzen –
Versuchen Sie 'sed -i 's /.* substring zu verwenden. */Replace /'' –
@Eddy_Em Das ersetzt die gesamte Zeile mit replace. Sie müssen Gruppierung verwenden, um den Teil der Zeile vor und nach der Teilzeichenfolge zu erfassen und dann in die Ersatzzeile einzufügen. 'sed -i 's/\ (. * \) Teilzeichenfolge \ (. * \)/\ 1Replace \ 2 /'' – JStrahl