Bagaimana cara menghapus teks dalam file?

71

Bagaimana menghapus teks yang ada dalam file teks tanpa membukanya?

Maksud saya misalnya saya memiliki file seperti hello.txthalnya beberapa data teks di dalamnya, dan bagaimana saya bisa menghapus total teks dalam file itu tanpa membukanya?

Maksud saya, saya tidak menggunakan editor seperti nano, Gedit, dll.

rɑːdʒɑ
sumber
1
Apa yang Anda maksud dengan 'membuka' file? Dalam semua jawaban yang diberikan sejauh ini file tersebut masih akan dibuka untuk ditulis oleh shell. Pada akhirnya shell hanyalah sebuah program seperti yang lainnya.
Jeff
@ Jeff tidak menggunakan hal-hal seperti nano, gedit dll.
rɑːdʒɑ
Hus787 Saya belum mengetik dari sana jika Anda berpikir begitu lagi saya menyambut minat Anda pada pertanyaan saya.
rɑːdʒɑ
Saya setuju dengan komentar Jeff ... Saya juga berpendapat * bahwa aliran file harus dibuka untuk menulis kepadanya, apakah Anda menggunakan editor teks, atau pengalihan. ( * hargai siapa pun yang menyadap tautan untuk membantu masalah ini )
tepatnya

Jawaban:

139

Cukup buka terminal Anda dengan CTRL+ ALT+ Tdan ketik as

 > hello.txt

itu saja, data Anda dalam file itu akan dihapus tanpa membukanya bahkan.

Contoh:

masukkan deskripsi gambar di sini

rɑːdʒɑ
sumber
5
Secara teknis file akan dibuka. Hanya saja tidak dalam editor.
John Dibling
2
@JohnDibling sebenarnya ini pengalihan, saya percaya file tidak dibuka di sini. Di redirection, isi stdoutmenimpa file yang ada jika ada. Dalam hal ini tidak ada sama sekali stdout. Jadi file sedang ditimpa dengan void, pada dasarnya menghapus data sebelumnya jika ada.
souravc
Apakah ada cara untuk membatalkan perintah ini?
Rao
@Rao, Jika besar seperti> 10GB, mungkin. Tapi seberapa jauh tidak pasti.
rɑːdʒɑ
28

Cara termudah adalah memotong file adalah dengan mengarahkan ulang output dari perintah no-op shell ( :) ke file yang ingin Anda hapus.

: > hello.txt
Eradman
sumber
2
Ini mungkin bukan yang termudah (relatif terhadap adil >) tetapi yang tercepat pasti .. saya ingin tahu mengapa itu tidak disebutkan dalam salah satu jawaban dari pertanyaan ini sangat dilihat .. di sini, ambil +1 ..
heemayl
13

Saya juga akan menggunakan pengalihan seperti jawaban rajagenupula. Tetapi ada sedikit lebih banyak fleksibilitas. Buka terminal dan ketik,

cat > hello.txt

Dan tekan Ctrl+ C. Ini akan menghapus file sebelumnya. Jika Anda ingin ini sejauh ini baik-baik saja.

Jika mau, Anda dapat melakukan sesuatu yang lebih setelah menghapus file. Dengan cara ini tidak hanya Anda dapat menghapus file tanpa membuka tetapi juga Anda dapat menulis beberapa baris dengan format yang tepat dalam file. Katakanlah Anda ingin menulis "Ubuntu adalah OS terbaik" setelah menghapus file, lakukan saja

cat > hello.txt
Ubuntu is the 
best OS

Lalu tekan Ctrl+ C. Sekarang file sebelumnya dihapus. Pada saat yang sama kata-kata ada dalam dua baris seperti yang saya katakan.

Lihat contohnya:

masukkan deskripsi gambar di sini

souravc
sumber
hai terima kasih sudah menjawab. sangat sedikit tetapi pekerjaan yang harus dikerjakan setelah itu juga & tetapi masih menarik. +1
rɑːdʒɑ
>singkatan redirection. cat > fileakan menulis stdoutke file, menimpa file yang ada.
souravc
10

Saya harus melakukan ini sepanjang waktu dengan file log. Cara termudah yang saya temukan adalah dengan perintah berikut:

cat /dev/null > hello.txt

Ini menghapus semua konten file, dan meninggalkan Anda dengan file kosong tanpa harus membukanya di editor, pilih teks, semua hal itu. Lebih khusus apa yang dilakukannya adalah mengganti isi file dengan isi "/ dev / null", atau tidak sama sekali. Sebenarnya cukup licin.

Satu-satunya peringatan adalah bahwa pengguna saat ini Anda masuk harus memiliki izin menulis ke file tersebut.

Don Briggs
sumber
Terima kasih atas jawabannya. Silakan tambahkan contoh agar terlihat lebih baik. + 1
rɑːdʒɑ
5

Jika file dibuat dengan nama hello.txt dan diberikan beberapa teks maka perintah di bawah di terminal ctrl+ alt+ takan menghapus semua teks dalam file hello.txt ,

echo "" > hello.txt

masukkan deskripsi gambar di sini

Avinash Raj
sumber
Terima kasih telah menjawab, +1. perluas dengan beberapa contoh agar terlihat lebih bagus.
rɑːdʒɑ
3

Pendekatan lain - cpyang /dev/nullke file

xieerqi:$ cat testFile.txt                                                                                        
Filesystem     1K-blocks     Used Available Use% Mounted on
/dev/sda1      115247656 83100492  26269816  76% /
none                   4        0         4   0% /sys/fs/cgroup
udev             2914492        4   2914488   1% /dev
tmpfs             585216     1152    584064   1% /run
none                5120        0      5120   0% /run/lock
none             2926072    98096   2827976   4% /run/shm
none              102400       76    102324   1% /run/user

xieerqi:$ cp /dev/null testFile.txt                                                                               

xieerqi:$ cat testFile.txt

xieerqi:$ 
Sergiy Kolodyazhnyy
sumber
kamu pria yang luar biasa!
Yasser Sinjab
2

Bukan jawaban terpendek tapi ...

Jawaban ini didasarkan pada yang lain dari Pengguna Super . Meskipun bukan perintah bash terpendek, truncateadalah yang paling mudah dibaca untuk pemula rata-rata:

$ echo Hello > Hello.txt
$ echo World! >> Hello.txt
$ cat Hello.txt
Hello
World!
$ truncate -s 0 Hello.txt
$ ll Hello.txt
-rw-rw-r-- 1 rick rick 0 Mar 20 17:32 Hello.txt

Parameter yang digunakan dengan truncateperintah di sini:

  • "-s" mengatur ukuran
  • Ukuran "0" akan menjadi nol

Hapus semuanya kecuali 10.000 byte pertama

Keuntungannya truncateadalah Anda dapat menentukan berapa banyak yang harus disimpan, bukan hanya nol:

$ truncate -s 10000 Hello.txt

... akan memotong segalanya setelah 10.000 byte pertama. Ini bisa berguna jika program menjadi gila dan membuang banyak Megabita data ke file log kecil:

  • Jalankan truncateperintah untuk ukuran normal yang lebih besar yaitu 10K
  • Buka file dengan editor teks Anda dan tekan End
  • Sorot dan PgUpuntuk menghapus byte yang tersisa yang tidak termasuk (biasanya dikenali oleh karakter sampah ASCII).
WinEunuuchs2Unix
sumber
0

Jadi, saya melihat banyak pengalihan digunakan untuk menjawab ini;)

Pendekatan yang sedikit berbeda dengan kombo: rm & touch

rm hello.txt && touch hello.txt

( yeah ... lagi cheat! )

Jadi dengan perintah ini kombo file hello.txt tidak dibuka dan pada akhirnya Anda masih memiliki file hello.txt sebagai gantinya dengan konten yang dihapus. Sama seperti yang Anda inginkan!

tepat
sumber
4
Bukan 'cheat' yang bagus menurut saya, itu bisa mengubah izin file ...
Parto
2
Ini mungkin lebih baik dihapus. Ini dapat menyebabkan masalah: izin dapat berubah. Jika dilakukan pada file log itu dapat menyebabkan perilaku tak terduga dari layanan yang mengharapkan log ada di sana dan dapat ditulis.
Rinzwind
Meskipun jawaban ini bukan cara terbaik sebagai tempat tujuan: Untuk memperbaiki masalah dengan pemilik / izin terlebih dahulu periksa kepemilikan dan izin lalu tambahkan ini (sesuaikan seperti yang diperlukan): && pengguna sudo chown: grup hello.txt && sudo chmod 644 hello.txt
Chris
nomor inode akan dihapus. nomor inode baru akan dibuat. ide buruk.
Dipankar Nalui
0
vi filename -c ':1,$d' -c ':wq'

bekerja yang terbaik untuk saya karena izin khusus yang dimilikinya

Daniel
sumber
Anda dapat meningkatkan jawaban ini dengan menguraikan masalah yang Anda miliki. Anda juga bisa menjelaskan apa programnya vidan apa yang dilakukan berbagai parameter dan argumen.
WinEunuuchs2Unix