bash: 출력의 두 번째 열 색상화

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'두 번째 공백 앞에 삽입 해야 합니다 . 아니면 좀 더 우아한 방법이 있을까요?

답변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하위 명령을 사용하십시오.

관련 정보