我尝试从.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
我希望grep pass2
。并且代码当然不应该太冗长。我最终得到了
grep 'password=' ~/.my.cnf | sed -e 's/password=//
但实际上#comment
落后于pass2
并且我不想替换整个注释(因为它长在原始而愚蠢到只需要替换它)。所以我需要一个正则表达式以某种方式获得pass2
。
主要目标是grep密码,以便我可以在shell命令行中轻松使用它
答案 0 :(得分:1)
使用perl:
perl -00 -ane '/\[client\].password=(\S+)/s && print $1' < ~/.my.cnf
<强>输出:
pass2
答案 1 :(得分:1)
$ awk -F'[= ]' '/^password=/ && p !~ /clientreadonly/{print $2} {p=$0}' ~/.my.cnf
pass2
-F'[= ]'
使用空格或=
作为字段分隔符/^password=/ && p !~ /clientreadonly/
如果行以password=
开头且上一行不包含clientreadonly
print $2
打印第二个字段p=$0
保存p
变量答案 2 :(得分:0)
您可以像以下一样进行修改 -
grep 'password=' ~/.my.cnf | sed -e 's/password=//' -e 's/ # comment//'
或其他方式 -
grep 'password=' ~/.my.cnf | cut -d' ' -f1 | cut -d'=' -f2