web-dev-qa-db-ja.com

sedを使用してファイルにテキストを追加する

Sedを使用してファイルにテキストを書き込むにはどうすればよいですか?より具体的には、タッチを使用して作成された空のテキストファイルにnull変数を追加します。 sedの構文は私にとって非常に混乱します。

13
Geofferey

ファイルの最後にテキストを追加するだけの場合は、そもそもsedを使用しません。

echo "some text" >> somefile.txt

使用する $ a

sed -i "$ a some text" somefile.txt
17
user4896506

承認された回答がこの問題に対する最も簡単な解決策であるので、遅い投稿を追加しますが、質問は実際にいくつかの一般的な状況を強調します:

  1. Sudoを介してファイルを編集する必要がある
  2. 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 ...を使用する必要があるかもしれません

4
DaveParillo

これは 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の回答に従ってその出力をファイルにリダイレクトできます。

1
ghoti