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