Linuxでファイルにテキストを追加する最も簡単な方法は何ですか?
私は この質問では を見ていましたが、受け入れられた答えは追加のプログラム(sed
)を使用していますecho
またはそれに類似した方法があるはずです。
cat >> filename
This is text, perhaps pasted in from some other source.
Or else entered at the keyboard, doesn't matter.
^D
基本的に、あなたが望むテキストをファイルにダンプすることができます。 CTRL-Dはファイルの終わりシグナルを送り、それが入力を終了させてシェルにあなたを返す。
どうですか?
echo "hello" >> <filename>
>>
演算子を使用するとファイルの末尾にデータが追加されますが、>
を使用するとファイルの内容が既に存在する場合は上書きされます。
同じ方法でprintf
を使用することもできます。
printf "hello" >> <filename>
上記を使用するのは危険です。たとえば、すでにファイルがあり、ファイルの末尾にデータを追加する必要があり、最後の>
を追加するのを忘れた場合、ファイル内のすべてのデータが破棄されます。 .bashrc
にnoclobber
変数を設定することで、この振る舞いを変えることができます。
set -o noclobber
echo "hello" > file.txt
を実行しようとすると、cannot overwrite existing file
という警告が表示されます。
ファイルへの書き込みを強制するには、特別な構文を使用する必要があります。
echo "hello" >| <filename>
また、デフォルトでecho
が末尾の改行文字を追加することを知っておく必要があります。これは-n
フラグを使用することによって抑制できます。
echo -n "hello" >> <filename>
参考文献
他の可能な方法は次のとおりです。
echo "text" | tee -a filename >/dev/null
-a
はファイルの最後に追加されます。
Sudo
が必要な場合は、以下を使用してください。
echo "text" | Sudo tee -a filename >/dev/null
受け入れられた答えまでフォローアップしてください。
スクリプトでこれを使用する場合は、終了を指定するために 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