EmergencyEMERGENCY? Get 24/7 Help Now!

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


Posted on:

|

By:


PREVIOUS POST
NEXT POST
Share Button

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:

Share Button
PREVIOUS POST
NEXT POST


Baron Schwartz

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



Tags:

Categories:
Insight for DBAs


Comments
  • Very nice, thanks!

    Reply

  • Thanks for sharing.

    Reply

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

    Reply

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

    Reply

  • 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

    Reply

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

    port=3306

    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)

    Reply

  • 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

    Reply

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

    Reply

  • 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

    Reply

  • Should have said:

    alias printmycnf=[insert perl one-liner]

    Reply

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

    Reply

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

    Reply

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

    Reply

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

    Reply

  • I tried that, but it just hung.

    Reply

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

    Reply

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

    Reply

Leave a Reply

Percona’s widely read Percona Data 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.