来自.my.cnf的{grep密码

时间:2017-07-29 13:24:00

标签: regex sed grep

我尝试从.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命令行中轻松使用它

3 个答案:

答案 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