2013-07-17 40 views

答えて

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

基本的に、あなたはファイルにしたい任意のテキストをダンプすることができます。 CTRL-Dは、ファイルの終わりの信号を送信し、入力を終了してシェルに返します。

+0

@JonKiparsky:申し訳ありませんが、あなたの答えに書かれているとは思わなかった... –

+1

ファイルにroot権限が必要な場合はどうすればいいですか? – UselesssCat

100

方法について:

echo "hello" >> <filename> 

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

また、同じ方法でprintfを使用することができます。上記を使用して危険なことができることを

printf "hello" >> <filename> 

注意を。たとえば、すでにファイルがあり、ファイルの末尾にデータを追加する必要があり、最後に>を追加することを忘れた場合、ファイル内のすべてのデータが破棄されます。あなたは.bashrcnoclobber変数を設定することによって、この動作を変更することができます

set -o noclobber 

今、あなたはあなたがcannot overwrite existing fileを言って警告が表示されますecho "hello" > file.txtやるしようとします。あなたは今、特別な構文を使用する必要があり、ファイルへの書き込みを強制的に

echo "hello" >| <filename> 

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

echo -n "hello" >> <filename> 

参照

+2

一般的に、私は 'cat'を使う答えよりも好きですが、'> 'の代わりに' >> 'を使うように注意してください! – sixty4bit

+0

@ sixty4bit - 完全に同意しますが、シェルを使って作業しているときや、sudo rm -r/'=などのようなことをしている場合は、常にあなたが何をしているのかを知っておく必要があります。 – Cyclonecode

+0

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

14

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

echo "text" | tee -a filename 

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

7

承認済みの回答に従います。

CTRL-D to designate the end if using this in a script以外のものが必要です。代わりにこれを試してください:

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

here document (or heredoc)を利用しています。

ただし、指定されたファイルに追加するにはsudoが必要な場合は、コマンドラインで直接入力する場合はI/Oリダイレクトのためにヘドロッコを利用するのが面倒です。

コマンドラインで直接入力しているときに、この変動は動作します

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

それとも猫とヒアドキュメントを使用したときに見られるコマンドラインのsudoの問題を避けるために、代わりにteeを使用することができます。

tee -a filename << EOF 
This is text entered via the keyboard or via a script. 
EOF 
関連する問題