Bashでファイルの先頭にテキストを追加するにはどうすればいいですか?
こんにちは、ファイルの先頭にテキストを追加したいです。例えば、todo.txtファイルの先頭にタスクを追加したいです。私はecho 'task goes here' >> todo.txt
を知っていますが、これはファイルの最後に行を追加します(私が望んでいるものではありません)。
こんにちは、ファイルの先頭にテキストを追加したいです。例えば、todo.txtファイルの先頭にタスクを追加したいです。私はecho 'task goes here' >> todo.txt
を知っていますが、これはファイルの最後に行を追加します(私が望んでいるものではありません)。
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
これは、$(...)
が 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番目から最後のものを除いて。それだと最後まで台無しになりませんからね。
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
を取得することができます。
Ex モードで Vim を使用することができます:
ex -s -c '1i|task goes here' -c x todo.txt
1
最初の行を選択
i
挿入
x
保存して閉じる
使えるのは、tee
:
echo 'task goes here' | cat - todo.txt | tee todo.txt
```です。