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