如何从.cnf文件中读取值?

时间:2014-08-13 15:19:24

标签: bash

从.cnf文件中读取值的有效bash命令是什么?我特意想从/etc/mysql/debian.cnf返回第一个密码值,如下所示:

[client]
host     = localhost
user     = debian-sys-maint
password = foo
socket   = /var/run/mysqld/mysqld.sock
[mysql_upgrade]
host     = localhost
user     = debian-sys-maint
password = foo
socket   = /var/run/mysqld/mysqld.sock
basedir  = /usr

2 个答案:

答案 0 :(得分:1)

你可以这样做:

$ awk '/^password/ {print $3; exit}' file
foo

它查找以"密码"开头的行。 (以避免注释行,以#开头),一旦找到,就会在其上打印第三个字段。然后,它退出;这样,您将只有一个输出(如果没有符合此模式的行,则没有输出)。

将其存储在变量中:

$ mypass=$(awk '/^password/ {print $3; exit}' file)
$ echo "$mypass"
foo

您也可以使用:

awk '/^password/ {split($0, a, "="); gsub(/^[ \t]+|[ \t]+$/, "", a[2]); print a[2]; exit}' file

它匹配以password开头的行,根据=字段对其进行切片并打印第二个字段。这样,password=hello也会起作用,也就是说,尾随空格不会影响最终解决方案。

答案 1 :(得分:1)

使用sed:

sed -n '/^password /{s/.*= *//p;q}' /etc/mysql/debian.cnf