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 echo
atau serupa.
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.
sudo !!
- yang mengeksekusi perintah terakhir dengansudo
prepended. Saya baru-baru ini menemukan ini juga bekerja dengannano
dll (dengan tidak sengaja mencobanano nano auth
...)!!
sebelumnya, luar biasa. Begitu sering saya melakukan hal-hal seperticat /var/log/apache/error.log
dan mendapat izin ditolak. Ini juga bisa dilakukan dengan id dari history misalnyasudo !1419
, ini akan menjalankan perintah pada baris1419
dalam history sebagai sudo.Bagaimana tentang:
Menggunakan
>>
operator akan menambahkan data di akhir file, sedangkan menggunakan>
akan menimpa konten file jika sudah ada.Anda juga bisa menggunakan
printf
dengan cara yang sama: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 menyetelnoclobber
variabel di.bashrc
:Sekarang ketika Anda mencoba melakukannya,
echo "hello" > file.txt
Anda akan mendapatkan peringatan yang mengatakancannot overwrite existing file
.Untuk memaksa penulisan ke file, Anda sekarang harus menggunakan sintaks khusus:
Anda juga harus tahu bahwa secara default
echo
menambahkan karakter baris baru yang dapat disembunyikan dengan menggunakan-n
bendera:Referensi
echo(1) - Linux man page
noclobber variable
I/O Redirection
sumber
cat
, tetapi Anda sebaiknya berhati-hati dalam memastikan untuk menggunakan>>
daripada>
!sudo rm -r /
=)sudo rm -r /
darisudo 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.set -o noclobber
Anda.bashrc
sehingga Anda tidak dapat menimpa file yang ada tanpa menggunakan sintaks khususecho "hello" >| <filename>
Cara lain yang mungkin adalah:
Ini
-a
akan ditambahkan di akhir file.Jika perlu
sudo
, gunakan:sumber
>/dev/null
bagian akhir mencegah "teks" untuk ditampilkan di konsol Anda.Tindak lanjuti untuk jawaban yang diterima.
Anda memerlukan sesuatu selain CTRL-D untuk menentukan akhir jika menggunakan ini dalam skrip . Coba ini sebagai gantinya:
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:
Atau Anda dapat menggunakan
tee
sebagai gantinya untuk menghindari masalah sudo baris perintah yang terlihat saat menggunakan heredoc dengan cat:sumber
cat << 'EOF' >
selama bertahun-tahun dan tidak tahu tentangcat << 'EOF' >>
menambahkan! Terima kasih