shell 从SQL文件中仅提取服务器版本

nzk0hqpo  于 2023-02-05  发布在  Shell
关注(0)|答案(3)|浏览(126)

我想grep一个SQL文件来获取以下信息,但是,我很难让它工作-我尝试了以下方法;

grep -Poe "-- Server version \K.*" _schemas.sql

SQL转储中的行为

-- MySQL dump 10.13  Distrib 5.1.55, for unknown-linux-gnu (x86_64)
--
-- Host: 10.213.118.88    Database: mysql
-- ------------------------------------------------------
-- Server version   5.1.55

格式不会改变-我只想grep服务器版本的实际数字,在本例中为5.1

sqlver=(awk '/Server version/ { split($NF,a,"."); print a[1] "." a[2] }' _schemas.sql)

if [ $sqlver -eq 5.1 ];

then

/opt/migrate/db_import.sh: line 118: [: awk: integer expression expected
ijxebb2r

ijxebb2r1#

要删除最左侧的空格,请在\K前添加“*

grep -Poe "-- Server version *\K.*" _schemas.sql  #5.1.55

要在您的情况下仅保留5.1,请将\K.*替换为*\K.{3}您想要的

grep -Poe "-- Server version *\K.{3}" _schemas.sql  #5.1

如果您不确定是制表符还是空格,请用途:

grep -Poe "-- Server version[ \t]*\K.{3}" _schemas.sql  #5.1

对应的sed版本:

sed -nE "s/-- Server version *(.*)/\1/p" _schemas.sql      #5.1.55

sed -nE "s/-- Server version *(.*)\..*/\1/p" _schemas.sql  #5.1
sed -nE "s/-- Server version[ \t]*(.*)\..*/\1/p" _schemas.sql #5.1
qojgxg4l

qojgxg4l2#

一个awk创意:

$ awk '/Server version/ { print $NF }' _schemas.sql
5.1.55

如果仅显示前2个以小数分隔的数字:

$ awk '/Server version/ { split($NF,a,"."); print a[1] "." a[2] }' _schemas.sql
5.1
4sup72z8

4sup72z83#

下面给出了该版本的前两个组件。

  • --服务器版本 * 和版本字符串可以用任意数量的空格或制表符分隔。
sed -ne "s/^-- Server version[ \t]*\([0-9]\{1,\}\.[0-9]\{1,\}\)\..*$/\1/p" < _schemas.sql

相关问题