我有几个带有很长行的大型 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...
有什么想法吗?