Bagaimana menambahkan output ke akhir file teks

478

Bagaimana cara menambahkan output perintah ke akhir file teks?

vincy
sumber

Jawaban:

665

Gunakan >>alih-alih >saat mengarahkan output ke file:

your_command >> file_to_append_to

Jika file_to_append_totidak ada, itu akan dibuat.

Contoh:

$ echo "hello" > file
$ echo "world" >> file
$ cat file 
hello
world
aioobe
sumber
4
Masalahnya adalah bahwa echomenghapus baris baru dari string. Bagaimana Anda menambahkan file string yang berisi baris baru?
Timothy Swan
5
@TimothySwan, saya percaya dengan opsi -e.
Valentin Grégoire
gema tidak menghapus baris baru dari string. Jika Anda gagal mengutip argumen dengan benar, maka shell akan membagi string dan meneruskan argumen ke echo dan echo bahkan tidak pernah melihat baris baru.
William Pursell
106

Untuk appendmenggunakan file >>

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

maka output seharusnya

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

Untuk overwritemenggunakan file >

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

maka put out adalah

hello tom

yoctotutor.com
sumber
74

Anda dapat menggunakan operator >>. Ini akan menambahkan data dari perintah ke akhir file teks.

Untuk menguji ini coba jalankan:

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

Lakukan ini beberapa kali dan kemudian jalankan:

cat textfile.txt

Anda akan melihat teks Anda telah ditambahkan beberapa kali ke file textfile.txt.

walta
sumber
40

Gunakan command >> file_to_append_tountuk menambahkan file.

Sebagai contoh echo "Hello" >> testFile.txt

PERHATIAN: jika Anda hanya menggunakan satu >Anda akan menimpa konten file. Untuk memastikan itu tidak pernah terjadi, Anda dapat menambahkan set -o noclobberke .bashrc.

Ini memastikan bahwa jika Anda secara tidak sengaja mengetik command > file_to_append_toke file yang ada, itu akan memberi tahu Anda bahwa file tersebut sudah ada. Contoh pesan kesalahan:file exists: testFile.txt

Jadi, ketika Anda menggunakannya >hanya akan memungkinkan Anda untuk membuat file baru, bukan menimpa file yang sudah ada.

kerajinan
sumber
22

Gunakan >>operator untuk menambahkan teks ke file.

Nev Stokes
sumber
21

Menggunakan tee dengan opsi -a (--append) memungkinkan Anda menambahkan beberapa file sekaligus dan juga menggunakan sudo (sangat berguna saat menambahkan file yang dilindungi). Selain itu, menarik jika Anda perlu menggunakan shell lain selain bash, karena tidak semua shell mendukung operator> dan >>

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

Utas ini memiliki jawaban yang bagus tentang tee

victortv
sumber
2
Ini adalah cara terbaik untuk menambahkan sesuatu dengan baris baru.
M_R_K
2
sedang mencari cara untuk menambahkan file yang dilindungi dan ini menyelesaikannya
Woootiness
14

untuk seluruh pertanyaan:

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

ini akan menambahkan 720 baris (30 * 24) ke dalam o.txt dan setelah itu akan mengganti nama file berdasarkan tanggal saat ini.

Jalankan di atas dengan cron setiap jam, atau

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

Saya akan menggunakan printf daripada echo karena lebih dapat diandalkan dan proses pemformatan seperti baris baru \ndengan benar.

Contoh ini menghasilkan output yang mirip dengan gema dalam contoh sebelumnya:

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

Namun jika Anda mengganti printf dengan gema dalam contoh ini, gema akan memperlakukan \ n sebagai string, sehingga mengabaikan maksudnya

printf "hello\nworld"  >> read.txt   
cat read.txt
hello
world
Braden Holt
sumber
7

Saya sarankan Anda melakukan dua hal:

  1. Gunakan >>dalam skrip shell Anda untuk menambahkan konten ke file tertentu. Nama file dapat diperbaiki atau menggunakan beberapa pola.
  2. Atur cronjob setiap jam untuk memicu skrip shell
sballmer
sumber
7

Misalnya file Anda mengandung:

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

jika Anda ingin menambahkan pada akhir file maka ----> ingat spasi antara 'teks' >> 'nama file'

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

Dan untuk menimpa isi file:

  3.  mangesh@001:~$ echo 'somthing new to write' > output.tx|cat output.tx
    somthing new to write
Mangesh Bhapkar
sumber
1
Ini menyesatkan dalam banyak detail. Spasi tidak penting dan mengirim output kosong ke cat... hanya benar-benar aneh. (Ini kosong karena Anda baru saja mengarahkan keluaran standar ke file.)
tripleee