use*_*963 9 colors text-processing
比方说,我有以下来自 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*
...
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种方法,如何为第二列着色。我知道如何使用 sed 为任何图案着色,但我不知道如何为特定列着色。基本上,我需要'\033[0;31m'在第一个空格之后和'\033[0m'第二个空格之前插入。或者也许有更优雅的方式?
Sté*_*las 10
使用 GNUgrep提供它已经构建了PCRE支持:
ls -l | GREP_COLORS='mt=1;41;37' grep --color -P '^\S+\s+\K\S+'
Run Code Online (Sandbox Code Playgroud)
与sed:
on=$(tput setaf 7; tput setab 1; tput bold) off=$(tput sgr0)
ls -l | sed "s/[^[:blank:]]\{1,\}/$on&$off/2"
Run Code Online (Sandbox Code Playgroud)
请注意, usingsetaf假设终端支持 ANSI 颜色转义序列,因此您最好对其进行硬编码,这也会使其不那么冗长。这里使用ksh93(也bash和zsh)语法:
on=$'\e[1;47;37m' off=$'\e[m'
Run Code Online (Sandbox Code Playgroud)
推广到第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"
Run Code Online (Sandbox Code Playgroud)
像这样的东西?
awk -v on="$(tput bold)" -v off="$(tput rmso)" '{ $2=on $2 off }; 1'
Run Code Online (Sandbox Code Playgroud)
编辑:使用正确的tput子命令。