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