我试图从.my.cnf获得(写访问)密码,但我还没有得到它。
.my.cnf看起来如下所示:
# longer
# comment text
[clientreadonly]
password=pass1 # comment
port=3306
user=test_ro
socket=/var/lib/mysql/mysql.sock
[client]
password=pass2 # comment
port=3306
user=test
socket=/var/lib/mysql/mysql.sock我想要pass2。当然,代码不应该太冗长。我最后
grep 'password=' ~/.my.cnf | sed -e 's/password=//但是,这实际上把#comment留在了pass2之后,我不想替换整个评论(因为仅仅替换它在原版中是很长的,而且很愚蠢)。因此,我需要一个正则表达式来获得pass2。
主要目标是将密码用于grep,这样我就可以在shell命令行中轻松地使用它。
发布于 2017-07-29 14:24:49
$ awk -F'[= ]' '/^password=/ && p !~ /clientreadonly/{print $2} {p=$0}' ~/.my.cnf
pass2-F'[= ]'使用空格或=作为字段分隔符。/^password=/ && p !~ /clientreadonly/ if行以password=开头,而前面的行不包含clientreadonly print $2打印第二个字段
p=$0将前一行保存在p变量中发布于 2017-07-29 13:41:22
你可以像下面这样修改一下-
grep 'password=' ~/.my.cnf | sed -e 's/password=//' -e 's/ # comment//'或者其他方式-
grep 'password=' ~/.my.cnf | cut -d' ' -f1 | cut -d'=' -f2发布于 2017-07-29 13:43:24
使用perl:
perl -00 -ane '/\[client\].password=(\S+)/s && print $1' < ~/.my.cnf输出:
pass2https://stackoverflow.com/questions/45389793
复制相似问题