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 "
$EMG1
$EMY234
$EMR567
$EMC8910
$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 "$EMG1$EMY234$EMR567$EMC8910$NONE"`/"
}
domagic
#to run: save as domagic.sh and run with: bash domagic.sh