解析 postgres 结果 bash
Parse postgres result in bash
通过运行这行代码:
psql -c "\l" -p 54049
我得到以下结果:
我的问题有点笼统BASH
1- 我如何在 BASH
中解析这样的 table
2-这种table叫什么
3- 任何用于学习BASH 困难方法的培训教程
4- 我如何将这个 table 解析为数组的数组,以便每一行都作为一个数组,而它的每个元素都作为列?
主要问题:
我想将我的手动输入与此 table 进行比较,因此如果我的输入数据库名称存在于结果中,它将继续,否则它将再次出现。
这是不起作用的代码:
dbsList=`psql -c "\l" -p 54049 | awk '{ print }'`
echo "Please enter a valid DB name you want to backup:"
read dbName
contains() {
[[ =~ (^|[[:space:]])""($|[[:space:]]) ]] && echo 0 || echo 1
}
contains dbsList dbName
while [ `contains dbsList dbName` -eq 1 ]
do
echo "Please enter a valid DB name you want to backup:"
read dbName
done
不要解析 \l
元命令的输出,最好使用 select pg_database
例如:
-bash-4.2$ for i in $(psql -c "select datname from pg_database" -Xt); do echo "you can do logic against $i"; done;
you can do logic against template1
you can do logic against template0
you can do logic against postgres
并回答您的问题:
- bash不是为解析而设计的,(你可以做,但问题太宽了)
- 这不是 table - 它是 select 查询
的 return
- 请从任何关于此的阅读开始,例如 http://tldp.org and psql
- 太多无意义的工作,考虑上面的例子
通过运行这行代码:
psql -c "\l" -p 54049
我得到以下结果:
我的问题有点笼统BASH
1- 我如何在 BASH
中解析这样的 table2-这种table叫什么
3- 任何用于学习BASH 困难方法的培训教程
4- 我如何将这个 table 解析为数组的数组,以便每一行都作为一个数组,而它的每个元素都作为列?
主要问题: 我想将我的手动输入与此 table 进行比较,因此如果我的输入数据库名称存在于结果中,它将继续,否则它将再次出现。
这是不起作用的代码:
dbsList=`psql -c "\l" -p 54049 | awk '{ print }'`
echo "Please enter a valid DB name you want to backup:"
read dbName
contains() {
[[ =~ (^|[[:space:]])""($|[[:space:]]) ]] && echo 0 || echo 1
}
contains dbsList dbName
while [ `contains dbsList dbName` -eq 1 ]
do
echo "Please enter a valid DB name you want to backup:"
read dbName
done
不要解析 \l
元命令的输出,最好使用 select pg_database
例如:
-bash-4.2$ for i in $(psql -c "select datname from pg_database" -Xt); do echo "you can do logic against $i"; done;
you can do logic against template1
you can do logic against template0
you can do logic against postgres
并回答您的问题:
- bash不是为解析而设计的,(你可以做,但问题太宽了)
- 这不是 table - 它是 select 查询 的 return
- 请从任何关于此的阅读开始,例如 http://tldp.org and psql
- 太多无意义的工作,考虑上面的例子