Suchen und Ersetzen von Text in mehreren Dokumenten über die Befehlszeile

Wenn Sie mit der Befehlszeile vertraut sind und in einer Situation, in der Sie ein Wort, einen Ausdruck, eine URL oder ein Zeichen in einer Gruppe von mehreren Textdokumenten suchen und ersetzen müssen, erledigt Perl die Aufgabe sehr gut. Eine einfache Befehlszeichenfolge führt sehr schnell einen Gruppen-Batch-Suchvorgang durch und ersetzt Text, sei es in einem einzelnen Dokument oder in einer Gruppe von mehreren Dokumenten.

Wie bei vielen anderen Dingen in der Befehlszeile gibt es auch keinen Bestätigungsprozess. Sie sollten also sicherstellen, dass Ihre Syntax korrekt eingestellt ist, bevor Sie einen Befehl ausführen. Andernfalls müssen Sie möglicherweise einen anderen Fehler suchen und ersetzen, um Ihren Tippfehler zu reparieren.

Die grundlegende Befehlssyntax lautet wie folgt:

perl -pi -w -e 's/THIS/THAT/g;' /path/to/files*.txt

Wenn Sie in einem Beispiel alle Instanzen von "Oger" durch "Maisbrot" in jeder .txt-Datei im Ordner "Dokumente" ersetzen müssen, verwenden Sie den folgenden Befehl:

perl -pi -w -e 's/ogre/cornbread/g;' ~/Documents/*.txt

Als Beispiel für das Finden und Ersetzen einer ganzen Phrase nehmen wir an, wir ersetzen den gesamten Satz "The Chocolate Factory" durch "The Wizard of Oz" in einer Gruppe von .txt-Dateien, beginnend mit "Films" in den Dokumenten Verzeichnis:

perl -pi -w -e 's/The Chocolate Factory/The Wizard of Oz/g;' ~/Documents/Films*.txt

Das Suchen und Ersetzen ist sofort erledigt. Sie können die Änderung überprüfen, indem Sie cat und grep verwenden, um Folgendes zu überprüfen:

cat ~/Documents/Films124.txt |grep "Wizard of Oz"

Zugegebenermaßen ist dies ziemlich weit fortgeschritten, und ja, Batch-Suchen und Ersetzen durch mehrere Dokumente kann benutzerfreundlicher über GUI-Apps wie TextWrangler und BBEdit erfolgen, aber manchmal ist die Kommandozeile für schnelle Aufgaben wie diese und andere einfach schneller sind ähnlich, und es erfordert keine zusätzlichen Downloads zu verwenden.

Ein großer Daumen hoch zu Lifehacker für den exzellenten Trick.

Update : Der Befehl 'sed' ist eine weitere Möglichkeit, über die Befehlszeile schnell zu suchen und zu ersetzen. Covering sed ist meist ein Thema für einen anderen Artikel, aber die grundlegende Syntax von sed für diese Aufgabe ist ein wenig einfacher und damit leichter zu merken:

sed -i 's/THIS/THAT/g' /path/to/files*.txt

Es gibt keinen richtigen oder falschen Weg, also ob Sie Perl oder Sed verwenden, ist eine Frage der persönlichen Präferenz.