bash: mewarnai kolom keluaran kedua


8

katakanlah, saya telah mengikuti keluaran dari ls:

$ ls -lAhF /bin
-rwxr-xr-x 1 root root 905K Apr 10  2010 bash*
-rwxr-xr-x 3 root root  31K Dec 26  2011 bunzip2*
-rwxr-xr-x 1 root root 505K Nov 15  2010 busybox*
-rwxr-xr-x 3 root root  31K Dec 26  2011 bzcat*
lrwxrwxrwx 1 root root    6 Jun 24  2012 bzcmp -> bzdiff*
...

Saya mencari cara, bagaimana saya bisa mewarnai kolom kedua. Saya tahu cara menggunakan sed untuk mewarnai pola apa pun, tapi saya tidak tahu cara mewarnai kolom tertentu. Pada dasarnya, saya perlu memasukkan '\033[0;31m'setelah ruang pertama dan '\033[0m'infront dari ruang kedua. Atau mungkin ada cara yang jauh lebih elegan?


1
jelek:ls --color -l | sed -e $'s/ *[^ ]* /\033[0;31m&\033[0m/'
frostschutz

Jawaban:


10

Dengan GNU grepasalkan telah dibangun dengan dukungan PCRE :

ls -l | GREP_COLORS='mt=1;41;37' grep --color -P '^\S+\s+\K\S+'

Dengan sed:

on=$(tput setaf 7; tput setab 1; tput bold) off=$(tput sgr0)
ls -l | sed "s/[^[:blank:]]\{1,\}/$on&$off/2"

Perhatikan bahwa menggunakan setafasumsi terminal mendukung urutan pelarian warna ANSI, jadi Anda mungkin juga membuat kode yang sulit, yang akan membuatnya kurang bertele-tele juga. Di sini dengan sintaks ksh93(juga bashdan zsh):

on=$'\e[1;47;37m' off=$'\e[m'

Untuk menyamaratakan n th kolom:

n=5

GREP_COLORS='mt=1;41;37' grep --color -P "^(\S+\s+){$(($n-1))}\K\S+"

sed "s/[^[:blank:]]\{1,\}/$on&$off/$n"

Referensi


grep -Pfantastis. Terima kasih banyak.
user1968963

6

Sesuatu seperti ini?

awk -v on="$(tput bold)" -v off="$(tput rmso)" '{ $2=on $2 off }; 1'

Sunting: gunakan tputsub perintah yang tepat .


Pengaturan $1akan mematahkan perataan kolom.
Stéphane Chazelas

2
Sebenarnya, rmsoadalah membatalkan smsomeskipun (mode stand-out), bukan bold. Pada banyak terminal ( tput rmsotidak tidak membatalkan tput bold).
Stéphane Chazelas
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.