解析 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

并回答您的问题:

  1. bash不是为解析而设计的,(你可以做,但问题太宽了)
  2. 这不是 table - 它是 select 查询
  3. 的 return
  4. 请从任何关于此的阅读开始,例如 http://tldp.org and psql
  5. 太多无意义的工作,考虑上面的例子