I had asked this question a while back: Is it possible to colorize permissions-part of the output of ls
?
While the accepted answer in that question is OK, I now want to do the same thing without using any "external" language. I came up with the following using a bash function and sed
.
The question is can you help me fix one bug and also help me make this code "better" ?
Make better: I am repeating
\([r-]\)\([w-]\)\([x-]\)\
three times. How to make this more succint?Fix bug: I am unable to get a back-reference to the tenth match
\10
. Doessed
only support up to 9 back-references?
The relevant portion of the code (broken into multiple lines for purposes of better readability when posting in this question):
ls -la | sed "s
/^
\([d-]\)
\([r-]\)
\([w-]\)
\([x-]\)
\([r-]\)
\([w-]\)
\([x-]\)
\([r-]\)
\([w-]\)
\([x-]\)
/
`echo -e \"
$EMG\1
$EMY\2\3\4
$EMR\5\6\7
$EMC\8\9\10
$NONE\"`/"
For reference, the complete function I am using is:
domagic() {
local NONE="\033[0m" # unsets color to term's fg color
# regular colors
local K="\033[0;30m" # black
local R="\033[0;31m" # red
local G="\033[0;32m" # green
local Y="\033[0;33m" # yellow
local B="\033[0;34m" # blue
local M="\033[0;35m" # magenta
local C="\033[0;36m" # cyan
local W="\033[0;37m" # white
# emphasized (bolded) colors
local EMK="\033[1;30m"
local EMR="\033[1;31m"
local EMG="\033[1;32m"
local EMY="\033[1;33m"
local EMB="\033[1;34m"
local EMM="\033[1;35m"
local EMC="\033[1;36m"
local EMW="\033[1;37m"
# background colors
local BGK="\033[40m"
local BGR="\033[41m"
local BGG="\033[42m"
local BGY="\033[43m"
local BGB="\033[44m"
local BGM="\033[45m"
local BGC="\033[46m"
local BGW="\033[47m"
#do magic here
ls -la | sed "s/^\([d-]\)\([r-]\)\([w-]\)\([x-]\)\([r-]\)\([w-]\)\([x-]\)\([r-]\)\([w-]\)\([x-]\)/`echo -e \"$EMG\1$EMY\2\3\4$EMR\5\6\7$EMC\8\9\10$NONE\"`/"
}
domagic
#to run: save as domagic.sh and run with: bash domagic.sh