Home
| Calendar
| Mail Lists
| List Archives
| Desktop SIG
| Hardware Hacking SIG
Wiki | Flickr | PicasaWeb | Video | Maps & Directions | Installfests | Keysignings Linux Cafe | Meeting Notes | Linux Links | Bling | About BLU |
Rather than go to that extra trouble, why not just use '\033' (or '\\033'), which sed ill recognize correctly? On Sun, Oct 16, 2011 at 8:01 PM, Derek Martin <invalid at pizzashack.org> wrote: > David, > > On Thu, Oct 13, 2011 at 03:00:04PM -0400, David Kramer wrote: >> I have a script at work that colorizes command outputs. ?I've mentioned it here before. ?I have >> the colors defined in environment variables: >> COLOR_ERROR='\e[37;41m' >> COLOR_GOOD='\e[32;40m' >> COLOR_RESET='\e[0m' >> COLOR_WARN='\e[33;40m' > > These variables are literal strings, i.e. '\e' here is the > two-character string, '\' and 'e'. ?The shell's built-in echo command > (with the -e option ONLY) interprets '\e' as an escape character. ?But > you're not using it in that context; and sed does not interpret it > that way. ?Also, the shell is going to interpret '\e' as 'e', which is > what sed will see. ?You'll need to do two things for this to work: > First use '\\e', which will give you an escaped '\' as well as the e. > Then you need to pass this string to echo -e, so that it will get > interpreted as an escape char. > >> > echo "This is a [WARNING] message " | sed -e 's/.*[WARNING].*/'${COLOR_WARN}'&'${COLOR_RESET}'/g;' > > This should work, once you properly escape the 'e': > > msg=`echo "This is a [WARNING] message " | sed 's//.*[WARNING].*/'${COLOR_WARN}'&'${COLOR_RESET}'/g;'` > echo -e $msg > > > I tried it locally with this: > > $ off='\\e[0m' > $ bold='\\e[1m' > $ msg=`echo "bold is as bold does" | sed s/bold/${bold}bold${off}/g` > $ echo -e "$msg" > bold is as bold does > > And both of the strings "bold" were printed in bold. > >> I even tried adding an extra escape backslash >> > echo "This is a [WARNING] message " | sed -e >> 's/.*[WARNING].*/\'${COLOR_WARN}'&\'${COLOR_RESET}'/g;' > > Again, the trick here is that only echo with the -e option treats '\e' > as an escape char. ?So you need to feed the result of the sed command > to echo somehow. ?It does not read from stdin, so the only way I can > think of to do that is to set a variable to the string you want to > print, and then echo -e $variable. > >> PS: I did see one working example at >> http://travelingfrontiers.wordpress.com/2010/08/22/how-to-add-colors-to-linux-command-line-output/ >> sed ''/crit/s//$(printf "\033[31mCRITICAL\033[0m")/g'' > > This works similarly... in this case, printf interprets \033 as an > escape sequence. ?In both cases though, it's not the shell's > command-line parser ?doing the interpreting; it's a behavior specific > to a built-in. > >> However, it relies on the printf command, which means (1)launching >> another process and 2) not using sed's buffers, so I can't have a >> series of sed operations in one command. > > Since you're relying on some program to interpret the '\e' sequence as > a literal escape program, you're stuck launching a separate process, > whether you go the echo route or the printf route (both are > shell-builtins in bash). ?If you really want to avoid this, however, > there is a way: ?Instead of writing '\e' in your code, press CTRL-V > ESC directly in your code, and that should insert a literal escape > character right in your code. ?The down side of doing this is that it > can't be copy-pasted; you'll get a literal '^[' string instead of an > actual escape character. > > But if you find that acceptable, then the following should work: > > > b='^[[1m' # Note that the '^[' is actually CTRL-V ESC > o='^[[0m' > echo "This is a [WARNING] message " | sed -e 's/.*[WARNING].*/'${b}'&'${o}'/g;' > > >> Also, I don't understand the doubled single quotes. ?That should be >> the equivalent of no quotes at all. > > I belive so. > > -- > Derek D. Martin ? ?http://www.pizzashack.org/ ? GPG Key ID: 0xDFBEAD02 > -=-=-=-=- > This message is posted from an invalid address. ?Replying to it will result in > undeliverable mail due to spam prevention. ?Sorry for the inconvenience. > > > _______________________________________________ > Discuss mailing list > Discuss at blu.org > http://lists.blu.org/mailman/listinfo/discuss > > -- John Abreau / Executive Director, Boston Linux & Unix Email jabr at blu.org / WWW http://www.abreau.net / PGP-Key-ID 0xD5C7B5D9 PGP-Key-Fingerprint 72 FB 39 4F 3C 3B D6 5B E0 C8 5A 6E F1 2C BE 99
BLU is a member of BostonUserGroups | |
We also thank MIT for the use of their facilities. |