Bagaimana cara menambahkan teks ke file?


109

Apa cara termudah untuk menambahkan teks ke file di Linux?

Saya telah melihat pertanyaan ini , tetapi jawaban yang diterima menggunakan program tambahan ( sed) Saya yakin seharusnya ada cara yang lebih mudah dengan echoatau serupa.

Jawaban:


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

Pada dasarnya, Anda dapat membuang teks apa pun yang Anda inginkan ke dalam file. CTRL-D mengirimkan sinyal akhir file, yang menghentikan input dan mengembalikan Anda ke shell.


2
Bagaimana saya bisa melakukan ini ketika file membutuhkan izin root?
— UselesssCat

2
@UselesssCat ketika sesuatu berjalan "izin ditolak", saya memeriksa ulang perintah apa pun yang saya jalankan dan kemudian gunakan sudo !!- yang mengeksekusi perintah terakhir dengan sudoprepended. Saya baru-baru ini menemukan ini juga bekerja dengan nanodll (dengan tidak sengaja mencoba nano nano auth...)
— Sandra

jika Anda perlu menggunakan sudo atau menggunakan ini dalam skrip, lihat tindak lanjut saya untuk jawaban yang diterima di bawah ini.
— pengguna12345

4
Saya tidak tahu kucing bisa digunakan seperti ini! Seperti menulis entri jurnal. Juga tidak tahu tentang apa yang dilakukan ctrl-d. Terima kasih!
— houallet

1
@ Sandra - Tidak pernah digunakan !!sebelumnya, luar biasa. Begitu sering saya melakukan hal-hal seperti cat /var/log/apache/error.logdan mendapat izin ditolak. Ini juga bisa dilakukan dengan id dari history misalnya sudo !1419, ini akan menjalankan perintah pada baris 1419dalam history sebagai sudo.
— Cyclonecode

172

Bagaimana tentang:

echo "hello" >> <filename>

Menggunakan >>operator akan menambahkan data di akhir file, sedangkan menggunakan >akan menimpa konten file jika sudah ada.

Anda juga bisa menggunakan printfdengan cara yang sama:

printf "hello" >> <filename>

Perhatikan bahwa penggunaan di atas bisa berbahaya. Misalnya jika Anda sudah memiliki file dan Anda perlu menambahkan data ke akhir file dan Anda lupa menambahkan terakhir >semua data di file akan dimusnahkan. Anda dapat mengubah perilaku ini dengan menyetel noclobbervariabel di .bashrc:

set -o noclobber

Sekarang ketika Anda mencoba melakukannya, echo "hello" > file.txtAnda akan mendapatkan peringatan yang mengatakan cannot overwrite existing file.

Untuk memaksa penulisan ke file, Anda sekarang harus menggunakan sintaks khusus:

echo "hello" >| <filename>

Anda juga harus tahu bahwa secara default echomenambahkan karakter baris baru yang dapat disembunyikan dengan menggunakan -nbendera:

echo -n "hello" >> <filename>

Referensi


4
Secara umum, saya menyukai ini lebih dari jawaban yang diterima yang digunakan cat, tetapi Anda sebaiknya berhati-hati dalam memastikan untuk menggunakan >>daripada >!
— sixty4bit

@ sixty4bit - Sangat setuju, tapi saya pikir Anda selalu harus tahu apa yang Anda lakukan saat bekerja dengan shell atau Anda mungkin melakukan sesuatu seperti sudo rm -r /=)
— Cyclonecode

1
lebih baik sudo rm -r /dari sudo rm -rf /! ^ _ ^ Apakah ada flag yang akan meminta konfirmasi sebelum menimpa konten file yang sudah ada >? Mengasali bahwa untuk selalu menggunakan bendera seperti itu sepertinya itu ide yang bagus.
— sixty4bit

2
@ sixty4bit - Anda dapat menambahkan set -o noclobberAnda .bashrcsehingga Anda tidak dapat menimpa file yang ada tanpa menggunakan sintaks khususecho "hello" >| <filename>
— Cyclonecode

dapatkah Anda memberikan contoh di mana file tersebut dipanggil, katakan "myFile.txt" atau sesuatu? Saya tidak yakin apakah itu <filename> atau nama file dalam contoh Anda
— bharal

24

Cara lain yang mungkin adalah:

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

Ini -aakan ditambahkan di akhir file.

Jika perlu sudo, gunakan:

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

Mengapa> / dev / null di akhir?
— Quadrivium

1
Di >/dev/nullbagian akhir mencegah "teks" untuk ditampilkan di konsol Anda.
— pengguna9869932

13

Tindak lanjuti untuk jawaban yang diterima.

Anda memerlukan sesuatu selain CTRL-D untuk menentukan akhir jika menggunakan ini dalam skrip . Coba ini sebagai gantinya:

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

Ini akan menambahkan teks ke file yang disebutkan (tidak termasuk "EOF").

Ini menggunakan dokumen di sini (atau heredoc) .

Namun jika Anda membutuhkan sudo untuk menambahkan file yang disebutkan, Anda akan mengalami masalah dalam menggunakan heredoc karena pengalihan I / O jika Anda mengetik langsung di baris perintah.

Variasi ini akan berfungsi saat Anda mengetik langsung di baris perintah:

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

Atau Anda dapat menggunakan teesebagai gantinya untuk menghindari masalah sudo baris perintah yang terlihat saat menggunakan heredoc dengan cat:

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

Saya telah menggunakan cat << 'EOF' >selama bertahun-tahun dan tidak tahu tentang cat << 'EOF' >>menambahkan! Terima kasih
— FreeSoftwareServers
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.