Předpokládejme, že máte file
takhle:
one
two
Poté pro připojení k prvnímu řádku:
$ sed '1 s_$_/etc/example/live/example.com/fullchain.pem;_' file
one/etc/example/live/example.com/fullchain.pem;
two
Vložení před první řádek:
$ sed '1 i /etc/example/live/example.com/fullchain.pem;' file
/etc/example/live/example.com/fullchain.pem;
one
two
Nebo pro připojení za první řádek:
$ sed '1 a /etc/example/live/example.com/fullchain.pem;' file
one
/etc/example/live/example.com/fullchain.pem;
two
Poznamenejte si číslo 1
v těchto sed
výrazy – tomu se říká adresa v sed
terminologie. Řekne vám, na jakém řádku příkaz, který následuje, má fungovat.
Pokud váš soubor neobsahuje řádek, který adresujete, sed
příkaz nebude proveden. To je důvod, proč nemůžete vložit/připojit na řádek 1, pokud je váš soubor prázdný.
Namísto použití editoru streamů , pro připojení (k prázdným souborům) stačí použít přesměrování shellu >>
:
echo "content" >> file
Váš problém pramení ze skutečnosti, že sed
nemůže najít řádek, na který má psát, například:
touch test
sed -i -e '1i/etc/example/live/example.com/fullchain.pem;\' test
pokusí se o zápis vložit na řádek 1 test
, ale tato čára v tuto chvíli neexistuje. Pokud jste soubor vytvořili jako:
echo -en "\n" > test
sed -i '1i/etc/example/live/example.com/fullchain.pem;\' test
to by si nestěžovalo, ale měli byste o řádek navíc. Podobně, když zavoláte:
sed -i "2i ssl_certificate_key /etc/example/live/example.com/privkey.pem;"
říkáte sed
pro vložení následujících dat na řádek 2, které v tomto bodě neexistují, takže sed
nemůže soubor upravit.
Takže pro počáteční řádek nebo poslední řádek v souboru byste neměli používat sed
protože jednoduché >
a >>
přesměrování streamu je více než dost.
Váš příkaz bude fungovat, pokud se ujistíte, že vstupní soubor má alespoň jeden řádek:
[ "$(wc -l < test)" -gt 0 ] || printf '\n' >> test
sed -i -e '1 i/etc/example/live/example.com/fullchain.pem;\' test