テキストファイルの最後に出力を追加する方法


478

コマンドの出力をテキストファイルの最後に追加するにはどうすればよいですか?

回答:


665

出力をファイルに送る場合の>>代わりに使用>します。

your_command >> file_to_append_to

file_to_append_to存在しない場合は作成されます。

例:

$ echo "hello" > file
$ echo "world" >> file
$ cat file 
hello
world

4
問題はecho、文字列から改行が削除されることです。改行を含む文字列をファイルにどのように追加しますか?
ティモシースワン

5
@TimothySwan、私は-eオプションで信じています。
ValentinGrégoire2018年

echoは、文字列から改行を削除しません。引数を適切に引用しないと、シェルは文字列を分割して引数をechoに渡し、echoは改行を認識しません。
William Pursell、

106

appendファイルの使用 >>

echo "hello world"  >> read.txt   
cat read.txt     
echo "hello siva" >> read.txt   
cat read.txt

その後、出力は

hello world   # from 1st echo command
hello world   # from 2nd echo command
hello siva

overwriteファイルの使用 >

echo "hello tom" > read.txt
cat read.txt  

その後、出力は

hello tom


74

>>演算子を使用できます。これにより、コマンドからのデータがテキストファイルの最後に追加されます。

これをテストするには、次を実行してみてください。

echo "Hi this is a test" >> textfile.txt

これを数回実行してから実行します。

cat textfile.txt

テキストがtextfile.txtファイルに数回追加されていることがわかります。


40

command >> file_to_append_toファイルに追加するために使用します。

例えば echo "Hello" >> testFile.txt

注意:シングルのみを使用する>と、ファイルの内容が上書きされます。これが起こらないようにするために、にを追加できset -o noclobberます.bashrc

これにより、誤って入力した場合に command > file_to_append_toて既存のファイルをした場合に、そのファイルが既に存在することを警告します。エラーメッセージの例:file exists: testFile.txt

したがって、>それを使用すると、既存のファイルを上書きするのではなく、新しいファイルを作成することだけができます。



21

オプション-a(-- append )でteeを使用すると、一度に複数のファイルに追加したり、sudoを使用したりできます(保護されたファイルに追加するときに非常に役立ちます)。さらに、すべてのシェルが>および>>演算子をサポートしているわけではないため、bash以外の他のシェルを使用する必要がある場合は興味深いです。

echo "hello world" | sudo tee -a output.txt

このスレッドはティーについて良い答えがあります


2
これは、新しい行で何かを追加する最良の方法です。
M_R_K

2
保護されたファイルに追加する方法を探していて、これで解決しました
Woootiness

14

質問全体について:

cmd >> o.txt && [[ $(wc -l <o.txt) -eq 720 ]] && mv o.txt $(date +%F).o.txt

これにより、720行(30 * 24)がo.txtに追加され、その後、現在の日付に基づいてファイルの名前が変更されます。

上記をcronで1時間ごとに実行するか、

while :
do
    cmd >> o.txt && [[ $(wc -l <o.txt) -eq 720 ]] && mv o.txt $(date +%F).o.txt
    sleep 3600
done

11

エコーの代わりにprintfを使用します。これは、信頼性が高く、改行などのフォーマットを\n適切に処理するためです。

この例では、前の例のechoと同様の出力が生成されます。

printf "hello world"  >> read.txt   
cat read.txt
hello world

ただし、この例でprintfをechoに置き換えた場合、echoは\ nを文字列として扱い、意図を無視します

printf "hello\nworld"  >> read.txt   
cat read.txt
hello
world

7

2つのことを行うことをお勧めします。

  1. >>シェルスクリプトで使用して、特定のファイルにコンテンツを追加します。ファイル名は固定することも、パターンを使用することもできます。
  2. シェルスクリプトをトリガーする1時間ごとのcronjobを設定します

7

たとえば、ファイルには次のものが含まれます。

 1.  mangesh@001:~$ cat output.txt
    1
    2
    EOF

ファイルの最後に追加したい場合----> 'text' >> 'filename'の間にスペースを入れてください

  2. mangesh@001:~$ echo somthing to append >> output.txt|cat output.txt 
    1
    2
    EOF
    somthing to append

そして、ファイルの内容を上書きするには:

  3.  mangesh@001:~$ echo 'somthing new to write' > output.tx|cat output.tx
    somthing new to write

1
これは多くの点で誤解を招く可能性があります。スペースは重要ではなく、空の出力をパイプすることcatは...完全に奇抜です。(標準出力をファイルにリダイレクトしただけなので空です。)
tripleee
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.