it-swarm.com.de

Wie kann ich eine Datei programmgesteuert nur mit dem Terminal bearbeiten?

Ich möchte ein Shell-Skript schreiben, mit dem ich die Datei aus dem Befehl lesen und bearbeiten kann, ohne manuell eingreifen zu müssen (basierend auf der Suche nach Text und dem Ersetzen durch einen anderen).

Ich brauche keinen Texteditor dafür .... einfach Textsuche (wie mit grep) und dann Ersetzen durch einen anderen Text und Speichern der Änderungen ....

13
Rohit Bansal

Hier kommt sed ins Spiel. Ein sed Befehl hat folgendes Format:

[pattern1][,pattern2][!] command [args]

Es werden reguläre Ausdrücke verwendet, so dass es etwas schwierig sein kann/wird. Einige grundlegende Beispiele aus dem 2. Link unten:

 # "foo" in jeder Zeile durch "bar" ersetzen (suchen und ersetzen) 
 sed 's/foo/bar /' # ersetzt nur die erste Instanz in einer Zeile 
 sed 's/foo/bar/4' # ersetzt nur die vierte Instanz in einer Zeile 
 sed 's/foo/bar/g' # ersetzt ALLE Instanzen in einer Zeile 
 sed 's/\ ( . * \) foo\(. * foo \)/\ 1bar\2/'# Ersetzen Sie den vorletzten Fall 
 sed' s/\ (. * \) foo/\ 1bar/'# Ersetzen Sie nur den letzten Fall 
 
 # Ersetzen Sie "foo" durch "bar" NUR für Zeilen, die "baz" 
 sed '/ baz/s/foo/bar/g enthalten. 
 
 # Ersetzen Sie "foo" durch "bar", MIT AUSNAHME von Zeilen, die "baz" 
 sed '/baz/!s/foo/bar/g'[.____ enthalten. ] 
 # Ändere "scharlachrot" oder "rubinrot" oder "puce" in "rot". 
 sed/scharlachrot/rot/g; s/rubinrot/g; s/puce/red/g '# most seds 
 gseds/scarlet\| Ruby\| puce/red/g' # GNU sed only 

Einige Referenzen

10
Rinzwind

Sehr späte Antwort. Dies könnte jedoch anderen bei einem ähnlichen Problem/einer ähnlichen Frage helfen.

Ich würde empfehlen, einen Patch zu erstellen und anzuwenden. Ein schönes Beispiel finden Sie hier .

Angenommen, eine new.txt-Datei enthält Änderungen, die Sie auf old.txt anwenden möchten. Sie können die Befehle auf einem Terminal oder durch Erstellen und Ausführen einer patch_file.sh ausführen.

Befehlszeile: Öffnen Sie ein Terminal und kopieren Sie die folgenden Zeilen und führen Sie sie aus (ändern Sie die Dateinamen nach Bedarf):

diff old.txt new.txt > patch.patch # to create the patch
patch old.txt -i patch.patch -o patched_old.text # to apply patch

Skript: Verwenden eines .sh-Dateiansatzes. In einem Terminal (Tastatur: Strg + Alt + T: gedit patch_file.sh

Kopieren Sie die Befehle, die auf dem Terminal ausgeführt werden, und fügen Sie sie in die .sh-Datei unter der Kopfzeile ein, wie unten gezeigt (gedit).

#!/bin/sh
diff old.txt new.txt > patch.patch # to create the patch
patch old.txt -i patch.patch -o patched_old.text # to apply patch

Machen Sie das Skript ausführbar (Terminal):

chmod +x patch_file.sh

Führen Sie das Skript (Terminal) aus:

./patch_file.sh # may require Sudo access depending on the directory affected
5
user3832905

Wenn Sie eine Datei bearbeiten möchten, verwenden Sie einen Datei-Editor. Es gibt befehlsbasierte Datei-Editoren, die von Skripten aus verwendet werden können, z. B. ex oder ed .

1
geirha

Du suchst sed oder awk. Ich finde sed einfacher und awk mächtiger.

Hier ist ein Beispiel von eine andere Frage .

sed -i 's/gedit.desktop/yournew.desktop/g' /usr/share/applications/defaults.list

Das heisst:

  • suche in Datei /usr/share/applications/defaults.list
  • Find/grep gedit.desktop
  • Ersetze mit yournew.desktop
  • Übernehmen Sie die Änderungen an Ort und Stelle -i
1
RobotHumans

Je nachdem, was Sie bearbeiten müssen, kann vi hilfreich sein, wenn Sie mit ed vertraut sind.

0
glenn jackman