Was ' ist der beste Weg, um eine Datei mit einem Bash-Skript zu bearbeiten?

Mit / bin / bash unter RHEL 5.8 möchte ich die Bearbeitung einer Datei automatisieren. Ich benötige das Skript, um die Datei zu durchsuchen und eine Zeile in der Datei zu ersetzen. Zeilenbeispiel:

Other line Current date 01121990 Other line 

Suchen Sie nach dieser Zeile und ersetzen Sie die Datumszeichenfolge durch ein vorbestimmtes Datum. Ich kann nicht zu einer neuen Datei zurückkehren und mein Datum eingeben, da diese Datei aus einer serverspezifischen Datei kopiert wird. Danke!

Kommentare

  • sed wäre hier das Werkzeug der Wahl …

Antwort

your_date="your desired date" sed -i "s/^Current date.*/Current date ${your_date}/" /path/to/file 

Das ist der einfachste Weg. Dies setzt voraus, dass alle Zeilen, die ein zu ersetzendes Datum enthalten, auch die einzigen Zeilen sind, die mit „Aktuelles Datum“ beginnen.

Beachten Sie, dass die Benutzerebene, die diesen Befehl ausführt, auch über die Berechtigung zum Bearbeiten dieser Datei verfügen muss.

-i bedeutet Inline-Bearbeitung, dh Sie bearbeiten die Datei direkt.

^Current date.* 

Bedeutet alle Zeilen beginnend mit: Aktuelles Datum und endet in irgendetwas. Mit anderen Worten, ersetzen Sie die gesamte Zeile durch das, was sich im zweiten /…/ Teil des sed-Dings befindet.

Double „wird um die sed-Anweisung verwendet, sodass Variablen als Variablen verwendet werden, nicht Zeichenfolgen.

Kommentare

  • Vielen Dank an Lizardx, dass ' genau das ist, was ich brauche, es und es getestet hat funktioniert super
  • sehr froh, das zu hören.

Antwort

ed kann auch direkt Dateien bearbeiten Die Inode-Nummer der bearbeiteten Datei bleibt unverändert.

file="/path/to/file" your_date="your desired date" ls -i "$file" printf "%s\n" H ",g/^Current date.*/s//${your_date}/" wq | ed -s "$file" ls -i "$file" 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.