代码之家  ›  专栏  ›  技术社区  ›  Dean Christian Armada

如何解析正确的版本号?

  •  0
  • Dean Christian Armada  · 技术社区  · 7 年前

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

    $ 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 回复  |  直到 7 年前
        1
  •  1
  •   CWLiu    7 年前

    修改 sed 如以下所述会有所帮助,

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

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

        2
  •  1
  •   Sumit    7 年前

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

        3
  •  1
  •   kvantour    7 年前
    • 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|'
        4
  •  0
  •   nbari    7 年前

    你可以使用 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 被发现。