GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie füge ich mit sed Text in die erste Zeile einer Datei ein?

Angenommen, Sie haben einen file so:

one
two

Dann an die erste Zeile anhängen:

$ sed '1 s_$_/etc/example/live/example.com/fullchain.pem;_' file
one/etc/example/live/example.com/fullchain.pem;
two

Vor der ersten Zeile einfügen:

$ sed '1 i /etc/example/live/example.com/fullchain.pem;' file
/etc/example/live/example.com/fullchain.pem;
one
two

Oder nach der ersten Zeile anhängen:

$ sed '1 a /etc/example/live/example.com/fullchain.pem;' file
one
/etc/example/live/example.com/fullchain.pem;
two

Beachten Sie die Zahl 1 in diesen sed Ausdrücke - das nennt man die Adresse in sed Terminologie. Es sagt Ihnen, auf welcher Linie der folgende Befehl ist zu operieren.

Wenn Ihre Datei die von Ihnen angesprochene Zeile nicht enthält, wird der sed Befehl wird nicht ausgeführt. Deshalb können Sie in Zeile 1 nicht einfügen/anhängen, wenn Ihre Datei leer ist.

Anstatt den Stream-Editor zu verwenden , um (an leere Dateien) anzuhängen, verwenden Sie einfach eine Shell-Umleitung >> :

echo "content" >> file

Ihr Problem rührt daher, dass sed kann die Zeile, in die Sie schreiben möchten, nicht finden, zum Beispiel:

touch test
sed -i -e '1i/etc/example/live/example.com/fullchain.pem;\' test

versucht zu schreiben, um in Zeile 1 von test einzufügen , aber diese Zeile existiert zu diesem Zeitpunkt nicht. Wenn Sie Ihre Datei erstellt haben als:

echo -en "\n" > test
sed -i '1i/etc/example/live/example.com/fullchain.pem;\' test

es würde sich nicht beschweren, aber Sie hätten eine zusätzliche Leitung. Ebenso, wenn Sie Folgendes aufrufen:

sed -i "2i ssl_certificate_key /etc/example/live/example.com/privkey.pem;"

du sagst sed um die folgenden Daten in Zeile 2 einzufügen, die an dieser Stelle nicht existieren, also sed kann die Datei nicht bearbeiten.

Für die Anfangszeile oder die letzte Zeile in der Datei sollten Sie also nicht sed verwenden weil einfach > und >> Stream-Umleitungen sind mehr als genug.


Ihr Befehl funktioniert, wenn Sie sicherstellen, dass die Eingabedatei mindestens eine Zeile enthält:

[ "$(wc -l < test)" -gt 0 ] || printf '\n' >> test
sed -i -e '1 i/etc/example/live/example.com/fullchain.pem;\' test

Linux
  1. So extrahieren Sie die tar.gz-Datei in Linux mithilfe der Befehlszeile

  2. Bearbeiten von Text auf der Kommandozeile mit sed

  3. Wie fügt man Text vor der ersten Zeile einer Datei ein?

  4. Wie verschiebt man eine Zeile in einer Textdatei um eine Zeile nach oben oder unten?

  5. Wie lösche ich mehrere zufällige Zeilen aus einer Textdatei mit Sed?

So laden Sie eine Datei auf Ubuntu über die Befehlszeile herunter

So laden Sie eine Datei unter Ubuntu Linux über die Befehlszeile herunter

So fügen Sie Text am Anfang einer Datei in Linux hinzu

So entfernen Sie Zeilen aus einer Datei mit dem Sed-Befehl

So löschen Sie ausgewählten Text im vi-Editor

Wie liest man die vorletzte Zeile in einer Datei mit Bash?