GNU/Linux >> Linux の 問題 >  >> Linux

sed を使用してファイルの 1 行目にテキストを挿入するにはどうすればよいですか?

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

Linux
  1. シェルコマンドを使用してASCIIファイルの最初のN行を削除するにはどうすればよいですか?

  2. コマンドSed‘1!g; h; $!d’は、ファイルの内容をどのように逆にしますか?

  3. Linuxのコマンドラインを使用してファイルを作成する

  1. コマンドラインを使用してLinuxでtar.gzファイルを抽出する方法

  2. sedを使用してコマンドラインでテキストを操作する

  3. Bashを使用してテキストファイルの最後の行を変数に読み込む方法は?

  1. Vimの各行の先頭にテキストを挿入する方法

  2. ファイルの最初の行の前にテキストを挿入する方法は?

  3. テキストファイルの行を1行上または下に移動するにはどうすればよいですか?