Linux 如何解析正确的版本号?
下面的命令将返回相应的字符串Linux 如何解析正确的版本号?,linux,shell,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'
$ 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
仅修改sed
,如下所示会有所帮助
sed -E 's/.*PostgreSQL[^0-9.]+([0-9.]*).*/\1/'
\1
仅与“PostgreSQL”后面的版本号匹配。修改sed
,如下所示会有所帮助
sed -E 's/.*PostgreSQL[^0-9.]+([0-9.]*).*/\1/'
\1
仅与“PostgreSQL”后面的版本号匹配。pg\u version=$(docker compose exec postgres postgres-V | grep-oE'[.0-9]+'| head-1)
pg\u version=$(docker compose exec postgres-V | grep-oE'[.0-9]+'.\head-1)
您可以将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)
,只返回右边的部分+?(?=\s)
,直到找到空间\s
。您可以将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)
,只返回右侧部分+?(?=\s)
,直到找到空间\s
。awk-v RS=“”/^[0-9.]+$/{print;exit}'
grep-oE'[0-9]+'| head-1
tr''\n'| grep-oE-m1'[0-9]+'
sed的|^[^0-9.]*\([0-9.]\+\)..|\1 |'
awk-v RS=“”/^[0-9.]+$/{print;exit}'
grep-oE'[0-9]+'| head-1
tr''\n'| grep-oE-m1'[0-9]+'
sed的|^[^0-9.]*\([0-9.]\+\)..|\1 |'
10.4(Debian 10.4-2.pgdg90+1)
你可以在空格等处破解它。。。但是我会使用另一种方法(比如SHOW server_版本):它仍然显示10.4(Debian 10.4-2.pgdg90+1)
10.4 10.4
。此值返回。如何只返回一个10.4?因为它两次找到版本,所以将头-1
放在第一个打印位置。@Sumit:我认为在这种情况下,egrep模式[.0-9]+
就足够了。顺便说一句,最好将其写成grep-oE
,因为egrep
已被弃用。@user1934428是的,谢谢10.4 10.4
。此值返回。如何只返回一个10.4?因为它两次找到版本,所以将头-1
放在第一个打印位置。@Sumit:我认为在这种情况下,egrep模式[.0-9]+
就足够了。顺便说一句,最好将其写成grep-oE
,因为egrep
已被弃用。@user1934428是的,谢谢