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


109

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

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

回答:


125
cat >> filename
This is text, perhaps pasted in from some other source.
Or else entered at the keyboard, doesn't matter. 
^D

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


2
ファイルにルート権限が必要な場合、どうすればいいですか?
UselesssCat 2017

2
@UselesssCat何かが「アクセスが拒否されました」になると、実行中のコマンドをすべて再確認してから使用します。sudo !!これにより、最後のコマンドがsudo先頭に追加されて実行されます。私は最近これがnano(偶発的にnano nano auth... しようとして)etc でも機能することを発見しました
サンドラ

スクリプトでsudoを使用する必要がある場合、またはこれを使用する必要がある場合は、以下のこの受け入れられた回答のフォローアップを参照してください。
user12345

4
猫がこんなふうに使えるなんて知らなかった!日記を書くように。ctrl-dが何をするかについても知りませんでした。ありがとうございました!
ホーレット2018

1
@Sandra- !!以前は使用していませんでした。だから私はしばしばのようなことをしcat /var/log/apache/error.log、許可が拒否されます。これは、履歴のIDを使用してsudo !1419実行することもできます。たとえば、履歴の行1419でコマンドをsudoとして実行します。
Cyclonecode

172

どうですか:

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>

参考文献


4
一般に、これはを使用する承認済みの回答よりも気に入っていますが、の代わりcatに使用するように注意してください。>>>
sixty4bit

@ sixty4bit-完全に同意しますが、シェルを操作するときに何をしているのかを常に知っている必要があります。そうでない場合、sudo rm -r /=)
Cyclonecode

1
より良いsudo rm -r /よりもsudo rm -rf /!^ _ ^既存のファイルの内容を上書きする前に確認を求めるフラグはあります>か?常にそのようなフラグを使用するというエイリアスを付けるのは良い考えのようです。
sixty4bit

2
@ sixty4bit -あなたが追加することができset -o noclobber、あなたの中で.bashrc、あなたは特別な構文を使用せずに既存のファイルを上書きすることはできませんecho "hello" >| <filename>
Cyclonecode

「myFile.txt」などのファイルが呼び出される例を教えていただけますか?あなたの例では<filename>かファイル名か
わかり

24

他の可能な方法は:

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

-aファイルの末尾に追加します。

必要な場合はsudo、以下を使用します。

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

なぜ> / dev / nullが最後にあるのですか?
Quadrivium

1
>/dev/nullあなたのコンソールに表示されるエンド防止「テキスト」で。
user9869932

13

承認された回答までフォローアップします。

これをスクリプトで使用する場合は、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、代わりにを使用して、heredocをcatで使用するときに見られるコマンドラインのsudoの問題を回避できます。

tee -a filename << EOF
This is text entered via the keyboard or via a script.
EOF

私はcat << 'EOF' >何年も使用しておりcat << 'EOF' >>、追加することを知りませんでした!ありがとう
FreeSoftwareServers
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.