file があるとします。 このように:
one
two
次に、最初の行に追加します:
$ sed '1 s_$_/etc/example/live/example.com/fullchain.pem;_' file
one/etc/example/live/example.com/fullchain.pem;
two
最初の行の前に挿入するには:
$ sed '1 i /etc/example/live/example.com/fullchain.pem;' file
/etc/example/live/example.com/fullchain.pem;
one
two
または、最初の行の後に追加するには:
$ sed '1 a /etc/example/live/example.com/fullchain.pem;' file
one
/etc/example/live/example.com/fullchain.pem;
two
番号 1 に注意してください それらの sed で 式 - アドレスと呼ばれる sed で 用語。どの行かがわかります 続くコマンドは操作です。
ファイルに指定した行が含まれていない場合、 sed コマンドは実行されません。そのため、ファイルが空の場合、1 行目に挿入/追加できません。
ストリーム エディタを使用する代わりに 、(空のファイルに)追加するには、シェルリダイレクト >> を使用するだけです :
echo "content" >> file
あなたの問題は sed という事実から生じています 書き込みを指示している行を見つけることができません。たとえば:
touch test
sed -i -e '1i/etc/example/live/example.com/fullchain.pem;\' test
test の 1 行目に挿入する書き込みを試みます 、しかし、その行はこの時点では存在しません。ファイルを次のように作成した場合:
echo -en "\n" > test
sed -i '1i/etc/example/live/example.com/fullchain.pem;\' test
文句はありませんが、余分な行ができます。同様に、呼び出した場合:
sed -i "2i ssl_certificate_key /etc/example/live/example.com/privkey.pem;"
あなたは sed と言っています その時点では存在しない2行目に次のデータを挿入するため、 sed ファイルを編集することはできません。
したがって、ファイルの最初の行または最後の行には sed を使用しないでください。 シンプルな > のため および >> ストリーム リダイレクトで十分です。
入力ファイルに少なくとも 1 行が含まれていることを確認すると、コマンドが機能します。
[ "$(wc -l < test)" -gt 0 ] || printf '\n' >> test
sed -i -e '1 i/etc/example/live/example.com/fullchain.pem;\' test