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 .
sedatau awkdan memasukkan urutan escape ANSI .
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 .
sedatau awkdan memasukkan urutan escape ANSI .
Jawaban:
Ini bisa dilakukan dengan awk. Sayangnya, karena format ls -ltidak 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 dengan FPATopsi, berkat jawaban SO ini :
ls -la | awk '
BEGIN {
FPAT = "([[:space:]]*[^[:space:]]+)";
OFS = "";
}
Dalam awk, setiap paramisional posisional ( $1,, $2dll.) Mengacu pada satu bidang, yaitu satu kolom pada baris saat ini. Apa yang dilakukan FPATopsi di atas adalah mendefinisikan kembali setiap bidang untuk memasukkan semua ruang sebelumnya, jadi ketika Anda printmundur 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:
{
$2 = "\033[31m" $2 "\033[0m";
$3 = "\033[36m" $3 "\033[0m";
$4 = "\033[36m" $4 "\033[0m";
$5 = "\033[31m" $5 "\033[0m";
$6 = "\033[36m" $6 "\033[0m";
$7 = "\033[36m" $7 "\033[0m";
$8 = "\033[31m" $8 "\033[0m";
print
}
'
Perhatikan bahwa setiap kolom diatur ulang ke default ( 0antara [dan m) 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:
lsc() {
ls -la | awk '
BEGIN {
FPAT = "([[:space:]]*[^[:space:]]+)";
OFS = "";
}
{
$2 = "\033[31m" $2 "\033[0m";
$3 = "\033[36m" $3 "\033[0m";
$4 = "\033[36m" $4 "\033[0m";
$5 = "\033[31m" $5 "\033[0m";
$6 = "\033[36m" $6 "\033[0m";
$7 = "\033[36m" $7 "\033[0m";
$8 = "\033[31m" $8 "\033[0m";
print
}
'
}
Anda mungkin perlu memulai kembali bashsesi Anda (atau menjalankan source ~/.bashrc) agar definisi fungsi ini dapat berjalan.
Dari sini, Anda bisa menelepon lsc, yang akan memberi Anda output yang Anda inginkan:
--color=always. Selama Anda tidak menerapkan warna berbeda ke kolom nama file ( $9dalam contoh saya), awkharus melewati mereka.
--color=alwaysadalah 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 -alFberwarna merah, yang ketiga hingga kedelapan berwarna biru dan yang kesembilan berwarna hitam:
ls -alF | awk -v black=$(tput setaf 0) -v red=$(tput setaf 1) -v blue=$(tput setaf 4) '{$2=red $2; $3= blue $3; $9=black $9} 1'
Ini hanya dimaksudkan sebagai contoh. Anda dapat menyesuaikan ini dengan isi hati Anda.
Bagi mereka yang lebih suka kode mereka tersebar di beberapa baris:
ls -alF | awk -v black=$(tput setaf 0) \
-v red=$(tput setaf 1) \
-v blue=$(tput setaf 4) \
'{
$2=red $2
$3= blue $3
$9=black $9
}
1'
tputadalah utilitas untuk menghasilkan berbagai kode kontrol untuk terminal Anda. Misalnya, tput setaf nsetel warna latar depan ke ntempat nberkisar dari 0 hingga 7
0 – Black
1 – Red
2 – Green
3 – Yellow
4 – Blue
5 – Magenta
6 – Cyan
7 – White
Anda dapat membaca lebih lanjut tentang tputdan kemampuan warnanya di sini .
Kode awk mendefinisikan variabel black ,, reddan blueyang 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.
awk! Saya sarankan Anda menyertakan pola untuk mempertahankan penyelarasan kolom juga :)
FPATtrik Anda untuk menjaga jarak yang benar.