从 SQL 转储中提取并组合值

从 SQL 转储中提取并组合值

我有几个带有很长行的大型 SQL 转储,其中一个在长语句中包含数据库的版本和颠覆INSERT,格式如下:

INSERT INTO `table` VALUES (...'version','v1.23'...'subversion','45'...

我想解析文件并获得一个输出,将版本和颠覆组合成类似的内容v1.23-45,如果给出一个文件,则单独进行,如果给出多个文件,则在文件名前面的多行上,每个文件一行,即,

file1: v1.23-45
file2: v6.78-91

我使用 sed 进行了以下尝试,但是(1)它假设 version 始终出现在 subversion 之前(不一定不合理,但不优雅),并且(2)不打印文件名:

sed -ns "s/.*'version','\([^']*\)'.*'subversion','\([^']*\)'.*/\1-\2/p" file ...

我还使用 grep 进行了以下尝试,但它在两行上打印每个文件的结果(我可以通过pr -ts -2仅针对单个文件情况将输出通过管道传输到 , bt 来组合):

grep -oP "'(sub)?version','\K[^']*" file ...

我没有尝试过 awk...

有什么想法吗?

相关内容