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*
...
2番目の列に色を付ける方法を探しています。 sedを使用してパターンに色を割り当てる方法を知っていますが、特定の列に色を割り当てる方法がわかりません。デフォルトでは、'\033[0;31m'
最初のスペースの後、'\033[0m'
2番目のスペースの前に挿入する必要があります。それとも、もう少しエレガントな方法がありますか?
答え1
GNUが提供するものを使用してgrep
使用されます。ポリメラーゼ連鎖反応サポートする:
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
ターミナルがANSIカラーエスケープシーケンスをサポートしていると仮定しているため、ハードコーディングする方が優れており、あまり冗長ではありません。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"
引用する
答え2
このような?
awk -v on="$(tput bold)" -v off="$(tput rmso)" '{ $2=on $2 off }; 1'
編集:正しいtput
サブコマンドを使用してください。