When I’m looking at a server, I often want to see the /etc/my.cnf file nicely formatted, and with comments stripped. This Perl one-liner will pretty-print the file:

17 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Marc Handelman

Very nice, thanks!

deminy

Thanks for sharing.

Jeff Schroeder

Besides forcing the spacing with the printf, this looks the same as: egrep -v ‘^$|^#’ /etc/my.cnf

julien antony

Nice, i like awk so i give you mine with sections separated by a line:
awk ‘! /^#/ && ! /^$/ {if($1 ~ /^\[/ ){gsub(“\[“,”\n[“,$1) };printf(“%-35s%s %s\n”,$1, $2, $3)}’ /etc/my.cnf

cheers.

Jacob Sohn

shorter version – 🙂
awk ‘! /(^#|^$)/ {printf “%-34s %s %s\n”, $1, $2, $3}’ /etc/my.cnf

if you don’t care about pretty formats – 🙂
grep -Ev ‘(^#|^$)’ /etc/my.cnf

-jacob

Jacob Sohn

using field separator option and if condition, with or without white space shows pretty format – 🙂

awk -F= ‘! /(^#|^$)/ { if ($2 != “”) printf “%-34s = %s\n”, $1,$2; else printf “%s\n”, $1 }’ /etc/my.cnf

I admit, this is longer than i want it to be…

-jacob

julien antony

for pretty output with colors, you can use this python script: http://www.linibou.com/colorex/ also useful for logs.

Seth

Any hints on how to get this to work as a bash alias?

I would like to add something like this to my .bashrc:

alias printmycnf=

but no amount of quote hacking is getting it to work.

Or has someone refactored it has a perl script? I think I could do that, but my first attempt was taking longer than 5 minutes so I thought I would ask.

Thanks

Seth

Should have said:

alias printmycnf=[insert perl one-liner]

Jacob Sohn

@Seth
knowning where to escape, you should be able to do as this;

alias printmycnf=’awk -F= “! /(^#|^$)/ { if (\$2 != \”\”) printf \”%-34s = %s\n\”, \$1,\$2; else printf \”%s\n\”, \$1 }”‘

you can replace with perl one-liner where awk is.

-jacob

Seth

@Jacob – Not sure what’s going on here… but the quoting is messed up. Appears to be the MS-SmartQuotes / unicode issue. Some of the double-quotes above are leaning one direction and some are leaning the other way. When I paste it as is into my terminal I get:

alias printmycnf=.awk -F= .! /(^#|^$)/ { if (\$2 != \.\.) printf \.%-34s = %s\n\., \$1,\$2; else printf \.%s\n\., \$1 }..

Did you copy and paste from somewhere weird, like a word document or something? I tried to modify it back to what it should be:

alias printmycnf=’awk -F= “! /(^#|^$)/ { if (\$2 != \”\”) printf \”%-34s = %s\n\”, \$1,\$2; else printf \”%s\n\”, \$1 }”‘

But when I ran it (RHEL 4.8) it just hung. I’ve tried inserting the perl string as an alias and doing various things to escape the quotes w/l much luck.

I guess I could just put the command into a shell script for now.

Seth

Appears that WordPress is messing up the quotes for us, as my post is exhibiting the same quoting issue.

Jacob Sohn

@Seth

Yeah, the “,’,` characters gets altered from ISO-8859-1 to UTF-8 probably. Copy and paste the code and just replace those characters with proper ones. Then all should work fine.

-jacob

Seth

I tried that, but it just hung.

Jacob Sohn

@Seth

have you tried “printmycnf /etc/my.cnf” after alias command?

On my system;
$ alias printmycnf=’awk -F= “! /(^#|^$)/ { if (\$2 != \”\”) printf \”%-34s = %s\n\”, \$1,\$2; else printf \”%s\n\”, \$1 }”‘
$ printmycnf /etc/my.cnf

works like a charm.

ps: don’t forget to replace single quote and double quote. better yet, just type it in manually.

Seth

Thanks, I got it working now. I don’t think I was including the filename before.