2011-02-17 03:21:12 +0000 2011-02-17 03:21:12 +0000
306
306

Bashでファイルの先頭にテキストを追加するにはどうすればいいですか?

こんにちは、ファイルの先頭にテキストを追加したいです。例えば、todo.txtファイルの先頭にタスクを追加したいです。私はecho 'task goes here' >> todo.txtを知っていますが、これはファイルの最後に行を追加します(私が望んでいるものではありません)。

回答 (9)

396
396
396
2011-02-17 03:34:10 +0000

001

または

echo 'task goes here' | cat - todo.txt > temp && mv temp todo.txt
sed -i '1s/^/task goes here\n/' todo.txt
sed -i '1itask goes here' todo.txt
``` または 

&001
81
81
81
2012-12-19 18:57:40 +0000

これは、$(...)todo.txt echo -e "task goes here\n$(cat todo.txt)" > todo.txt

で上書きされる前に、> todo.txt の中のコマンドが実行されるからです。 他の答えは問題なく動作しますが、私は毎日 echo と cat を使っているので、こちらの方が覚えやすいと思います。もうひとつ、はるかに簡単な方法として、改行を前置文字列に入れる方法は…

echo "task goes here
$(cat todo.txt)" > todo.txt

…単に改行を使うことです。確かに、これはもう一行ではありませんが、現実的には以前は一行ではありませんでした。スクリプトの中でこれを実行していて、インデントが気になる場合 (関数の中でこれを実行している場合など) には、以下のような回避策があります:

(echo 'task goes here' && cat todo.txt) > todo.txt
echo 'task goes here'$'\n'"$(cat todo.txt)" > todo.txt

また、todo.txt の最後に改行が追加されるかどうかが気になる場合は、これらを使用しないでください。まあ、2番目から最後のものを除いて。それだと最後まで台無しになりませんからね。

28
28
28
2013-04-22 12:47:19 +0000

moreutils ](http://joeyh.name/code/moreutils/)には、`sponge`と呼ばれる素敵なツールがあります:

echo "task goes here" | cat - todo.txt | sponge todo.txt

それはSTDINを「吸い上げて」ファイルに書き込んでくれるので、一時的なファイルや移動を心配する必要がありません。

多くのLinuxディストロで、moreutilsを介して、またはOS Xでは Homebrew を使用して、apt-get install moreutilsを取得することができます。

12
12
12
2016-04-11 00:23:56 +0000

Ex モードで Vim を使用することができます:

ex -s -c '1i|task goes here' -c x todo.txt
  1. 1 最初の行を選択

  2. i 挿入

  3. x 保存して閉じる

5
5
5
2011-02-17 03:26:24 +0000

新規で一時的なファイルを作成することができます。

echo "new task" > new_todo.txt
cat todo.txt >> new_todo.txt
rm todo.txt
mv new_todo.txt todo.txt

sed を使うこともあるかもしれません。でも基本的には同じです。

3
3
3
2011-02-17 06:25:01 +0000

ファイルの先頭にコンテンツを挿入することはできません。

あなたの質問に対する解決策は、一時的なファイル(またはバッファ)を作成する必要があります(メモリ上またはディスク上)。

3
3
3
2013-01-09 22:49:33 +0000

テキストファイルがメモリに収まる程度の小ささであれば、差し替え用のテンポラリファイルを作る必要はありません。メモリに全部読み込んでファイルに書き出せばいいのです。

echo "$(echo 'task goes here' | cat - todo.txt)" > todo.txt

&001

ファイルの先頭に行を追加するのは、ファイル全体を書きすぎないと無理です。

1
1
1
2014-07-08 14:16:36 +0000

使えるのは、tee:

echo 'task goes here' | cat - todo.txt | tee todo.txt
```です。
0
0
0
2018-08-04 07:04:48 +0000

GitBash + Windows10 + Multline :

複数行の文字列を使えるようにしたバージョンです。