Sedを使用してファイルにテキストを書き込むにはどうすればよいですか?より具体的には、タッチを使用して作成された空のテキストファイルにnull変数を追加します。 sedの構文は私にとって非常に混乱します。
ファイルの最後にテキストを追加するだけの場合は、そもそもsedを使用しません。
echo "some text" >> somefile.txt
使用する $ a
。
sed -i "$ a some text" somefile.txt
承認された回答がこの問題に対する最も簡単な解決策であるので、遅い投稿を追加しますが、質問は実際にいくつかの一般的な状況を強調します:
sed
を使用して空のファイルを変更しようとしています。つまり、touch
してからsed
でファイルを編集することはできません。 Sedは空のファイルでは機能しませんが、場合によっては
Sudo echo "some text" >> somefile.txt
Sudoはリダイレクトを好みませんが、回避策があります。
echo "some text" | Sudo tee somefile.txt
またはパイプもオプションではない場合、または単にmust sedを使用する場合、または複雑さが好きな場合:
dd if=/dev/zero count=1 bs=1 of=somefile.txt
sed -i '$ a some text' somefile.txt
sed -i '1 d' somefile
一部のシステムでは。 sed -i -e '$ a ...
を使用する必要があるかもしれません
これは XY問題 のように思えます。特定のソリューションの実装について支援を求めるのではなく、解決しようとしている問題について尋ねると、より良いまたはより役立つ答えが得られる場合があります。
ただし、これをsedで行う必要がある場合は、sedのr
コマンドを使用してファイルを読み取ることができます。例えば:
[ghoti@pc ~/tmp]$ cat one
RED
BLUE
[ghoti@pc ~/tmp]$ cat two
green
yellow
[ghoti@pc ~/tmp]$ echo ">> start"; sed '$r two' one; echo ">> end"
>> start
RED
BLUE
green
yellow
>> end
[ghoti@pc ~/tmp]$
Sedコマンド$r two
は、入力の最後の行(この場合はファイル "one"からのもの)を処理した後、 "two"という名前のファイルでsedにSedさせます。
これにより、1つのファイルが別のファイルのストリームにマージされますが、sedの「標準出力」(stdout
)は、完全な/結合されたストリームを含むものです。必要な場合は、Ignacioの回答に従ってその出力をファイルにリダイレクトできます。