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.
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.
Jawaban:
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 dengan sudo
prepended. Saya baru-baru ini menemukan ini juga bekerja dengan nano
dll (dengan tidak sengaja mencoba nano nano auth
...)
!!
sebelumnya, luar biasa. Begitu sering saya melakukan hal-hal seperti cat /var/log/apache/error.log
dan mendapat izin ditolak. Ini juga bisa dilakukan dengan id dari history misalnya sudo !1419
, ini akan menjalankan perintah pada baris 1419
dalam history sebagai sudo.
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 printf
dengan 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 noclobber
variabel di .bashrc
:
set -o noclobber
Sekarang ketika Anda mencoba melakukannya, echo "hello" > file.txt
Anda 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 echo
menambahkan karakter baris baru yang dapat disembunyikan dengan menggunakan -n
bendera:
echo -n "hello" >> <filename>
Referensi
cat
, tetapi Anda sebaiknya berhati-hati dalam memastikan untuk menggunakan >>
daripada >
!
sudo rm -r /
=)
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.
set -o noclobber
Anda .bashrc
sehingga Anda tidak dapat menimpa file yang ada tanpa menggunakan sintaks khususecho "hello" >| <filename>
Cara lain yang mungkin adalah:
echo "text" | tee -a filename >/dev/null
Ini -a
akan ditambahkan di akhir file.
Jika perlu sudo
, gunakan:
echo "text" | sudo tee -a filename >/dev/null
>/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:
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 tee
sebagai 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
cat << 'EOF' >
selama bertahun-tahun dan tidak tahu tentang cat << 'EOF' >>
menambahkan! Terima kasih