Welches GNU / Linux-Kommandozeilen-Tool würde ich für eine Suche durchführen und ersetzen auf einer Datei?

StackOverflow https://stackoverflow.com/questions/155934

  •  03-07-2019
  •  | 
  •  

Frage

Welches GNU / Linux-Kommandozeilen-Tool würde ich für eine Suche verwenden und ersetzen auf einer Datei?

Können der Suchtext und Ersatz, in einem regex Format angegeben werden?

War es hilfreich?

Lösung

sed 's/a.*b/xyz/g;' old_file > new_file

GNU sed (die Sie wahrscheinlich haben) ist noch vielseitiger:

sed -r --in-place 's/a(.*)b/x\1y/g;' your_file

Hier ist eine kurze Erklärung dieser Optionen:

  

-i [SUFFIX], --in-place [= SUFFIX]                   Bearbeiten von Dateien in Ort (macht Backup wenn Erweiterung mitgeliefert)

     

-r, --regexp-extended                   verwenden erweiterte reguläre Ausdrücke im Skript.

Die FreeBSD Version unterstützt auch diese Optionen. Die NetBSD und OpenBSD Versionen unterstützen nur -r.

Wenn Sie mehr über sed lernen, Cori hat vorgeschlagen, diesem Tutorial .

Andere Tipps

Perl wurde für diese erfunden:

perl -pi -e 's/foo/bar/g;' *.txt

Jeder normale s /// Muster in diesen einfachen Anführungszeichen. Sie können mit so etwas wie dies eine Sicherung halten:

perl -pi.bak -e 's/foo/bar/g;' *.txt

oder Pipeline:

cat file.txt | perl -ne 's/foo/bar/g;' | less

Aber das ist wirklich mehr Aufgabe des sed.

Betrachten Rubin als Alternative zu Perl. Es stahlen die meisten Perl Einzeiler Command args (-i, -p, -l, -e, -n) und Auto-Sets für Sie $_ wie Perl tut und hat viel regex Güte. Zusätzlich Rubys Syntax kann bequemer und einfacher sein, die lesen oder zu schreiben, als Perl oder sed. (Oder auch nicht, je nach Ihrem Geschmack.)

ruby -pi.bak -e '$_.gsub!(/foo|bar/){|x| x.upcase}' *.txt

vs.

perl -pi.bak -e 's/(foo|bar)/\U\1/g' *.txt

In vielen Fällen, wenn sie mit Einzeiler tun haben, ist die Leistung nicht genug ein Problem zu kümmern, ob Sie leichte sed oder Schwergewicht Perl oder heaveier Gewicht Rubin verwenden. Verwenden Sie, was am einfachsten schreiben.

sed , der Stream-Editor, und ja, es nutzt regex.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top