如何解析正确的版本号?

时间:2018-07-30 02:25:48

标签: linux shell

下面的命令将返回相应的字符串

$ docker-compose exec postgres postgres --version
postgres (PostgreSQL) 10.4 (Debian 10.4-2.pgdg90+1)

我正在尝试获取postgresql版本,但是当我尝试时,会包括Debian版本和其他数字,例如

$ pg_version=$(docker-compose exec postgres postgres --version | sed 's/[^0-9.]//g')
10.410.42.901

我想知道如何只获得10.4

4 个答案:

答案 0 :(得分:1)

按如下所示修改sed会有所帮助,

sed -E 's/.*PostgreSQL[^0-9.]+([0-9.]*).*/\1/'

\1仅与“ PostgreSQL”后面的版本号匹配。

答案 1 :(得分:1)

pg_version=$(docker-compose exec postgres postgres -V | grep -oE '[.0-9]+' | head -1)

答案 2 :(得分:1)

  • awk -v RS=" " '/^[0-9.]+$/{print; exit}'
  • grep -oE '[.0-9]+' | head -1
  • tr ' ' '\n' | grep -oE -m 1 '[.0-9]+'
  • sed 's|^[^0-9.]*\([0-9.]\+\).*|\1|'

答案 3 :(得分:0)

您可以将grep与以下内容一起使用:

$ grep -oP "PostgreSQL.\s\K.+?(?=\s)"

例如:

$ echo "postgres (PostgreSQL) 10.4 (Debian 10.4-2.pgdg90+1)" | grep -oP "SQL.\s\K.+?(?=\s)"
10.4

可以将\K理解为排除在左边*SQL)<space>之前的所有内容,并仅返回右边的部分.+?(?=\s),直到找到空格\s