web-dev-qa-db-ja.com

ファイルにテキストを追加する方法

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

私は この質問では を見ていましたが、受け入れられた答えは追加のプログラム(sed)を使用していますechoまたはそれに類似した方法があるはずです。

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

基本的に、あなたが望むテキストをファイルにダンプすることができます。 CTRL-Dはファイルの終わりシグナルを送り、それが入力を終了させて​​シェルにあなたを返す。

115
Jon Kiparsky

どうですか?

echo "hello" >> <filename>

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

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

printf "hello" >> <filename>

上記を使用するのは危険です。たとえば、すでにファイルがあり、ファイルの末尾にデータを追加する必要があり、最後の>を追加するのを忘れた場合、ファイル内のすべてのデータが破棄されます。 .bashrcnoclobber変数を設定することで、この振る舞いを変えることができます。

set -o noclobber

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

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

echo "hello" >| <filename>

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

echo -n "hello" >> <filename>

参考文献

149
Cyclonecode

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

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

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

Sudoが必要な場合は、以下を使用してください。

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

受け入れられた答えまでフォローアップしてください。

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

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

これは指定されたファイルにテキストを追加します( "EOF"は含みません)。

これは here文書(またはheredoc) を利用します。

しかし、あなたがSudoが述べられたファイルに追加する必要があるなら、あなたが直接コマンドラインでタイプしているなら、あなたはI/Oリダイレクションのためにheredocを利用することに問題を起こすでしょう。

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

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

あるいは、catでheredocを使用するときに見られるコマンドラインSudo問題を回避するために代わりにteeを使用することができます。

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