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"