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