tr a A </ etc / hosts | sort -r | pr -d> / etc / hosts

9

Di baris ini:

tr a A < /etc/hosts | sort -r |pr -d > /etc/hosts 

apa yang akan menjadi hasil yang diharapkan? Saya tahu huruf kecil 'a' akan berubah menjadi huruf besar 'A' tapi apa selanjutnya? Apakah file asli akan ditimpa karena pengalihan ke nama file yang sama?

tdharrison
sumber
Anda seharusnya mendapatkan bash: /etc/hosts: Permission deniedkesalahan (dengan asumsi shell Anda adalah bash), kecuali jika Anda menjalankannya sebagai root. /etc/hostsbiasanya hanya dapat ditulis oleh root. Jika Anda menjalankan ini sebagai root(yang seharusnya tidak Anda lakukan), Anda akan mendapatkan yang kosong /etc/hostsseperti yang dijelaskan Michael Homer.
arielf

Jawaban:

17

Hasil yang diharapkan adalah /etc/hostsfile kosong .

Pengalihan > /etc/hoststerjadi dan memotong file sebelum program mulai berjalan dan trmulai membaca dari file.

Untuk menulis output /etc/hosts, Anda bisa bekerja dengan salinan file (atau memindahkan file output Anda ke tempatnya sesudahnya), atau menggunakan spongeperintah dari moreutils , yang akan menyerap input standar dan menulis ke file:

tr a A < /etc/hosts | sort -r | pr -d | sponge /etc/hosts

Dalam hal itu, setiap "a" di /etc/hostsakan diganti dengan "A", semua garis akan diurutkan secara terbalik sesuai dengan lokal Anda , garis kosong akan dimasukkan di antara setiap baris , dan hasilnya akan dimasukkan ke dalam /etc/hosts.


Anda juga mungkin menemukan berguna:

Michael Homer
sumber
1
Terima kasih banyak untuk mengklarifikasi apa yang harus saya harapkan dengan cara itu ditulis dan bagaimana bisa ditulis untuk mendapatkan hasil yang diharapkan.
tdharrison
moreutils adalah tool-suite yang sangat hebat
Robert Riedl