123

Linux でファイルにテキストを追加する最も簡単な方法は何ですか?

私はこの質問を見ましたが、受け入れられた答えは追加のプログラムを使用しています( )または同様sedのより簡単な方法があるはずです。echo

4

4 に答える 4

195

どうですか:

echo "hello" >> <filename>

演算子を使用する>>と、ファイルの末尾にデータが追加されますが、 を使用する>と、ファイルの内容が既に存在する場合は上書きされます。

printf同じ方法で使用することもできます:

printf "hello" >> <filename>

上記を使用すると危険な場合があることに注意してください。たとえば、既にファイルがあり、ファイルの最後にデータを追加する必要があり、最後の追加を忘れた場合>、ファイル内のすべてのデータが破棄されます。noclobberで変数を設定することにより、この動作を変更できます.bashrc

set -o noclobber

これを実行しようとするecho "hello" > file.txtと、 という警告が表示されますcannot overwrite existing file

ファイルへの書き込みを強制するには、特別な構文を使用する必要があります。

echo "hello" >| <filename>

デフォルトでは、フラグechoを使用して抑制できる末尾の改行文字が追加されることも知っておく必要があります。-n

echo -n "hello" >> <filename>

参考文献

于 2013-07-17T14:08:14.627 に答える
142
cat >> filename
This is text, perhaps pasted in from some other source.
Or else entered at the keyboard, doesn't matter. 
^D

基本的に、必要なテキストをファイルにダンプできます。CTRL-D はファイル終了シグナルを送信します。これにより、入力が終了し、シェルに戻ります。

于 2013-07-17T14:11:50.680 に答える
25

他の可能な方法は次のとおりです。

echo "text" | tee -a filename >/dev/null

はファイルの-a最後に追加されます。

が必要な場合sudoは、次を使用します。

echo "text" | sudo tee -a filename >/dev/null
于 2015-06-10T16:01:58.900 に答える
18

受け入れられた回答をフォローアップします。

これをスクリプトで使用する場合は、CTRL-D以外で終了を指定する必要があります。代わりにこれを試してください:

cat << EOF >> filename
This is text entered via the keyboard or via a script.
EOF

これにより、指定されたファイルにテキストが追加されます (「EOF」は含まれません)。

ヒア ドキュメント (またはヒアドキュメント)を利用します。

ただし、指定されたファイルに追加するために sudo が必要な場合、コマンド ラインで直接入力すると、I/O リダイレクトが原因でヒアドキュメントを利用する際に問題が発生します。

このバリエーションは、コマンド ラインで直接入力している場合に機能します。

sudo sh -c 'cat << EOF >> filename
This is text entered via the keyboard.
EOF'

または、tee代わりに使用して、cat でヒアドキュメントを使用するときに見られるコマンド ライン sudo の問題を回避できます。

tee -a filename << EOF
This is text entered via the keyboard or via a script.
EOF
于 2017-04-15T07:59:02.243 に答える