Judul jenis mengatakan itu semua: saya ingin mendapatkan orang-kolom berwarna rapi output dari sesuatu seperti ls -al
, katakanlah, seperti dalam jawaban 10basetom ini untuk pertanyaan ini .
8
Judul jenis mengatakan itu semua: saya ingin mendapatkan orang-kolom berwarna rapi output dari sesuatu seperti ls -al
, katakanlah, seperti dalam jawaban 10basetom ini untuk pertanyaan ini .
sed
atauawk
dan memasukkan urutan escape ANSI .Jawaban:
Ini bisa dilakukan dengan
awk
. Sayangnya, karena formatls -l
tidak ditentukan, tidak mungkin untuk menghasilkan solusi yang akan bekerja pada setiap sistem sehingga beberapa penyesuaian warna yang digunakan untuk kolom mana yang akan diperlukan pada beberapa sistem.Pertama, kami ingin melestarikan ruang asli yang digunakan oleh
ls -l
. Kalau tidak, perataan kolom akan salah. Kita dapat melakukan ini denganFPAT
opsi, berkat jawaban SO ini :Dalam
awk
, setiap paramisional posisional ($1
,,$2
dll.) Mengacu pada satu bidang, yaitu satu kolom pada baris saat ini. Apa yang dilakukanFPAT
opsi di atas adalah mendefinisikan kembali setiap bidang untuk memasukkan semua ruang sebelumnya, jadi ketika Andaprint
mundur itu membuat ruang sehingga kolom tetap di posisi yang sama.Sekarang kita cukup mengedit setiap bidang untuk memasukkan kode warna , dan kemudian mencetak hasil yang diedit:
Perhatikan bahwa setiap kolom diatur ulang ke default (
0
antara[
danm
) setelahnya. Jika Anda ingin warna berjalan di beberapa kolom, Anda dapat menghilangkan kode itu. Secara pribadi, saya lebih suka menentukan setiap kolom secara independen.Anda dapat mendefinisikan perintah yang dapat digunakan kembali di
.bashrc
. Sebagai contoh:Anda mungkin perlu memulai kembali
bash
sesi Anda (atau menjalankansource ~/.bashrc
) agar definisi fungsi ini dapat berjalan.Dari sini, Anda bisa menelepon
lsc
, yang akan memberi Anda output yang Anda inginkan:sumber
--color=always
. Selama Anda tidak menerapkan warna berbeda ke kolom nama file ($9
dalam contoh saya),awk
harus melewati mereka.--color=always
adalah ekstensi GNU jadi jika Anda menggunakan sistem non-GNU (mis. MacOS, BSD lainnya) Anda harus menginstal versi GNU atau menggunakan alternatif .Ini akan mencetak kolom kedua
ls -alF
berwarna merah, yang ketiga hingga kedelapan berwarna biru dan yang kesembilan berwarna hitam:Ini hanya dimaksudkan sebagai contoh. Anda dapat menyesuaikan ini dengan isi hati Anda.
Bagi mereka yang lebih suka kode mereka tersebar di beberapa baris:
Detail
tput
adalah utilitas untuk menghasilkan berbagai kode kontrol untuk terminal Anda. Misalnya,tput setaf n
setel warna latar depan ken
tempatn
berkisar dari 0 hingga 7Anda dapat membaca lebih lanjut tentang
tput
dan kemampuan warnanya di sini .Kode awk mendefinisikan variabel
black
,,red
danblue
yang berisi kode terminal masing-masing untuk hitam, merah, dan biru. Kode-kode ini ditempatkan di awal kolom apa pun yang ingin kita warnai.Salah satu triknya adalah kode warna tidak mengatur ulang sendiri. Jadi, apa pun warna terakhir yang Anda tentukan pada satu baris akan, kecuali perintah warna lain ditentukan, menjadi warna default untuk baris berikutnya.
sumber
awk
! Saya sarankan Anda menyertakan pola untuk mempertahankan penyelarasan kolom juga :)FPAT
trik Anda untuk menjaga jarak yang benar.