Saya memiliki file log yang memiliki banyak hal di dalamnya yang tidak saya perlukan lagi. Saya ingin menghapus isinya.
Saya tahu cara mencetak konten ke layar:
cat file.log
Saya tahu cara mengedit file, baris demi baris:
nano file.log
Tetapi saya tidak ingin menghapus setiap baris satu per satu. Apakah ada cara untuk melakukannya dalam satu perintah tanpa merusak file untuk melakukannya?
linux
command-line
Andrew
sumber
sumber
bash
sebagai shell Anda dan bukan egcmd.exe
atau PowerShell, yang keduanya tidak cukup POSIXy diharapkan untuk menangani hal-hal seperti itu.Anda dapat menggunakan perintah pengguna: truncate
("-s 0" untuk menentukan ukuran)
http://www.commandlinefu.com/commands/view/12/empty-a-file
sumber
sudo echo > file
hanya memberikan kesalahan dalam kasus seperti itu.sudo bash -c '> filename'
adalah bagaimana Anda menggunakan solusi Bash dengan sudo.brew install truncate
pada os x dengan homebrew diinstal.Anda bisa melakukan ini:
Menggunakan
>
untuk menulis input (null) dariecho -n
ke file.Menggunakan
>>
akan menambahkan input nol ke file (secara efektif tidak melakukan apa pun kecualitouch
itu).sumber
true
(atau alias bawaannya:
), meskipun pada akhirnya Anda tidak memerlukan perintah sama sekali (lihat jawaban yang diterima).sudo
.Sama seperti
> filename
di Bash, tetapi bekerja di lebih banyak kerang (kredit) . Redirect output daritrue
builtin (yang tidak memiliki output) kefilename
.sumber
:> filename
. Bukankah itu terlihat seperti tersenyum? :>ZSH
ZSH akan melindungi pengguna dari clobbering file menggunakan operator pengalihan io
>
. Jika Anda menggunakan,>!
Anda dapat memaksa pemotongan file yang ada.Jika Anda ingin ZSH menggunakan perilaku pengalihan Bash, jika tidak ada perlindungan dari clobbering file, maka Anda perlu mengatur
clobber
opsi untuk shell Anda.Info Lebih Lanjut: http://zsh.sourceforge.net/Doc/Release/Redirection.html
sumber
JIKA Anda ingin melakukan dari dalam editor vim di baris perintah, Anda dapat mencoba ini:
Tekan Esc.
Tekan Enter.
Anda akan menemukan semua baris dihapus.
sumber
maillog
, bahkansudo > /var/log/maillog
tidak akan menghapusnya (izin ditolak)sudo > /var/log/maillog
alat - jalankan sudo, dan masukkan hasilnya ke file. Jelas itu menempatkan output dengan izin pengguna saat ini. Hal yang lebih mudah dilakukansudo su
untuk memulai shell root dan kemudian lakukan> /var/log/maillog
.atau
diikuti oleh
control-d
.atau ... atau ... atau ...
Ah. Ini adalah versi perintah tunggal:
sumber
echo "" > file.log
lebih baik daripadacat
opsi yang Anda tunjukkan, dalam situasi ini, ada yang laincat
yang lebih tepat. keduanya menggunakan pengalihan shell yang sama untuk melakukan pengangkatan berat.rm
akan menyelesaikan tugas menghasilkan file kosong dengan nama yang sama. Tapi itu tidak akan tepat untuk setiap kasus penggunaan.Perintah di bawah ini juga harus berfungsi:
sumber
Jika Anda perlu sudo ke hak akses superuser untuk mengakses file maka jawaban yang diterima tidak akan berfungsi. Menggunakan ini berfungsi:
atau secara eksplisit dengan sudo:
Info lebih lanjut di sini http://www.commandlinefu.com/commands/view/12/empty-a-file
sumber
Beberapa alternatif:
sumber
Jika Anda memiliki spasi dalam nama file, gunakan:
(Saya tidak dapat memasukkannya ke dalam komentar untuk jawaban sebelumnya karena saya tidak memiliki reputasi 50. Terkadang keterbatasan bersifat kontra-produktif.)
sumber
Satu baris sekaligus?
Coba vi (m), editor teks cantik yang bisa melakukan apa saja. Dalam hal ini, navigasikan ke sebuah saluran, tekan d (untuk menghapus), dan d lagi (untuk saluran).
sumber
gg
bergerak ke atas sehingga seluruh urutan bisa terjadiggdG
.Dengan izin saya ini adalah satu-satunya hal yang berhasil:
sumber
Juga, jika Anda memiliki banyak file, Anda dapat menggunakan yang berikut ini:
Ini bermanfaat untuk file log di direktori yang sama.
sumber
> a.txt
Sama seperti> nama file di Bash, tetapi berfungsi di lebih banyak shell (kredit). Redirect output dari builtin yang sebenarnya (yang tidak memiliki output) ke nama file.
sumber