Ersetzen Sie Text in Dateien mit nur einem Befehl: perl

Manchmal möchten wir Text in einer Datei ersetzen, zum Beispiel alles, was in der Datei Document.txt „meine Familie“ lautet, durch „uns“ ersetzen . Dazu können wir unseren bevorzugten Texteditor (Kate, Gedit, Sublime Text usw.) verwenden, aber es ist immer gut, Alternativen zu kennen, um dasselbe Ergebnis zu erzielen.

Es stellt sich heraus, dass dies mit regulären Ausdrücken möglich ist; der Befehl `sed` ist einfach großartig, er bietet unzählige Variationen und Optionen, aber… für diejenigen, die Text nur auf die einfachste Weise ersetzen möchten , präsentiere ich Ihnen diese viel einfachere Variante:

Dem Beispiel folgend befindet sich die Datei Document.txt im Verzeichnis $HOME/Document.txt und enthält folgenden Text:

Meine Familie ist wie jede andere, wie deine oder die deines Nachbarn. Wir versuchen sogar, uns gesellschaftlich korrekt und politisch korrekt zu verhalten. Allerdings gibt es bei uns ein schwarzes Schaf, und das bin ich – haha! Ich war schon immer diejenige, die sich nicht scheut, ihre Meinung zu sagen (auch wenn sie nicht gesellschaftlich akzeptiert ist), obwohl meine Familie die Nase voll hat von der heutigen, verkorksten Gesellschaft.

Der folgende Befehl ändert " meine Familie " in " wir ":

perl -pi -e "s[mi familia][nosotros]g" $HOME/Documento.txt

So einfach ist das 

Der Text wäre also:

(…) Wir sind wie alle anderen, wie deine oder die deines Nachbarn. Tatsächlich versuchen wir , uns in den Augen der Gesellschaft verantwortungsbewusst zu verhalten, politisch und sozial korrekt. Allerdings gibt es in meiner Familie ein schwarzes Schaf, und das ist meine Rolle, haha! Ich war schon immer diejenige, die keine Angst hat, ihre Meinung zu sagen (auch wenn sie in den Augen der Gesellschaft nicht korrekt erscheint), obwohl meine Familie eigentlich die Nase voll hat von dem Dreck der heutigen Gesellschaft.

Die Syntax lautet:

perl -pi -e "s[lo-que-quiero-cambiar][lo-nuevo-a-poner]g" archivo-en-el-cual-reemplazar

Der Befehl scheint etwas komplex zu sein. Lassen Sie uns ihn etwas aufschlüsseln und etwas einfacher erklären 

  • perl : Was wir verwenden werden, Perl
  • -Pi : Pí, wie Ï€ (der ungefähre Wert von 3.14)
  • -e : Das E stellt es sich vor, damit «e ausgeführt wird» ^ - ^
  • Dann in Anführungszeichen » wir eröffnen mit einem s und wir schließen mit einem g: "sg" …stellen Sie sich das S für Start und das G für Game Over vor 
  • Biegen Sie zwischen dem sg wir müssen zwei Sätze von Klammern setzen: [] y []so sein: S [] [] g
  • In den ersten Klammern wird, wie oben erwähnt, der Text, den wir entfernen und durch einen neuen ersetzen möchten, angezeigt, während in der zweiten Klammer der neue Text wie folgt angezeigt wird: "S [meine Familie] [wir] g"

Einfach, nicht wahr?

Die Erklärung ist tatsächlich viel länger als für den Befehl nötig, sie ist recht einfach zu verstehen 

Perl ist viel, viel mehr als eine Möglichkeit, Text zu ersetzen, es ist eine ganze Sprache 

Wenn Sie mehr darüber erfahren möchten, installieren Sie das Paket perl-doc und schauen Sie sich an, was es alles ermöglicht; es ist einfach eine andere Welt.

Übrigens und zum Schließen, vorausgesetzt, Sie möchten alle TXT-Dateien finden, die Sie in $ HOME / Documents / haben, und in jeder Datei "meine Familie" durch "uns" ersetzen, können Sie find + perl beitreten, um dies zu erreichen:

find $HOME/Documentos/ -name *.txt -exec perl -p -i -e "s[mi familia][nosotros]g" {} \;

Oder mit einem Platzhalter:

perl -p -i -e "s[mi familia][nosotros]g" $HOME/Documentos/*.txt

Das Problem bei dieser zweiten Variante besteht darin, dass Dateien in Unterordnern  nicht ersetzt werden

Ich hoffe jedenfalls, dass Sie es interessant fanden. Für mich war es wirklich nützlich, ich kann jetzt Text direkt vom Terminal aus ersetzen ... großartig! 


Als bevorzugte Quelle in Google hinzufügen