关于linux:如何解析正确的版本号?

How to parse the correct version number?

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

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

我正在尝试获取PostgreSQL版本,但是当我尝试时,debian版本和其他数字包括如下

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

我想知道如何只买10.4


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

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


修改sed,如下所示将有所帮助,

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

\1只与"postgresql"后面的版本号匹配。


您可以将grep与以下内容结合使用:

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

例如:

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

\K可以理解为排除了它前面左边*SQL)的所有内容,只返回右边.+?(?=\s)直到和空格\s被找到。