EmergencyEMERGENCY? Get 24/7 Help Now!

How to pretty-print my.cnf with a one-liner

 | June 15, 2009 |  Posted In: Insight for DBAs


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:

Baron Schwartz

Baron is the lead author of High Performance MySQL. He is a former Percona employee.


  • 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


  • 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


  • The awk versions work well as long as there’s whitespace, but they won’t pretty-print


    I like awk too, but I’m so clumsy with it that I’m not sure what to do to fix that!

    (PS: the Perl version doesn’t pretty-print things without whitespace perfectly either, but it’s pretty enough for me)

  • 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…


  • 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.


  • @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 – 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

    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.


  • @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.

Leave a Reply


Percona’s widely read Percona Database Performance blog highlights our expertise in enterprise-class software, support, consulting and managed services solutions for both MySQL® and MongoDB® across traditional and cloud-based platforms. The decades of experience represented by our consultants is found daily in numerous and relevant blog posts.

Besides specific database help, the blog also provides notices on upcoming events and webinars.
Want to get weekly updates listing the latest blog posts? Subscribe to our blog now! Submit your email address below and we’ll send you an update every Friday at 1pm ET.

No, thank you. Please do not ask me again.