bash: раскрасить второй столбец вывода

скажем, у меня есть вывод из 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* ... 

Я ищу способ, как я могу раскрасить второй столбец. Я знаю, как использовать sed для раскрашивания любого шаблона, но я не знаю, как раскрасить определенный столбец. В принципе, мне нужно вставить '\033[0;31m' после первого пробела и '\033[0m' infront второго пространства. Или, может быть, есть намного более элегантный способ?

С GNU grep при условии, что он был создан с поддержкой PCRE :

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

С sed :

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

Обратите внимание, что использование setaf предполагает, что терминал поддерживает escape-последовательности ANSI color, поэтому вы можете также записать жесткий код, что сделало бы его менее подробным. Здесь с ksh93 (также bash и zsh ):

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

Обобщение на n- й столбец:

 n=5 GREP_COLORS='mt=1;41;37' grep --color -P "^(\S+\s+){$(($n-1))}\K\S+" sed "s/[^[:blank:]]\{1,\}/$on&$off/$n" 

Рекомендации

  • tput – использование, набор и цвета
  • Bash Prompt HOWTO – 6.5. Цвета и перемещение курсора с помощью tput
  • Bash Prompt HOWOT – 6.1. Цвета

Что-то вроде этого?

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

Изменить: используйте соответствующие подкоманды tput .