grep和awk只复制insert语句



我有一个.sql文件,其中包含多行Create、Insert、Alter语句。现在我只想获取Insert语句,并将其复制到另一个.sql文件中。

Create和Insert语句的示例是

CREATE CACHED TABLE "PUBLIC"."xyz"(
"ID" BIGINT NOT NULL,
"GID" BIGINT NOT NULL,
"GDATA" BINARY(65536)
);

INSERT INTO "PUBLIC"."INFORMIX_SERVERS" VALUES
(4521215141212121, 8763121524544545454
4545, X'3a000000127265706f7369746f7279536572');

我尝试了以下命令,但没有成功cat dump.sql|grep-i'插入*(;'

cat dump.sql | grep -E 'insert*);' | awk -F> '{ print $2 }' | awk -F< '{ print $1 }'

如果Input_file的INSERT语句的所有行前后都为空,那么这可能会有所帮助。

awk -v RS= '/^INSERT/' Input_file

或者更通用的解决方案,你可以尝试如下。

awk '!NF||/^CREATE/{foundInsert=""} /^INSERT/{foundInsert=1} foundInsert' Input_file

解释:添加以上详细解释。

awk '               ##Starting awk program from here.
!NF || /^CREATE/{   ##Checking condition if NF is NULL OR line starts from CREATE then do following.
foundInsert=""    ##Nullifying foundInsert here.
}
/^INSERT/{          ##Checking condition if line starts from INSERT then do following.
foundInsert=1     ##Setting foundInsert to 1 here.
}
foundInsert         ##Checking if foundInsert is SET then print that line.
' Input_file        ##Mentioning Input_file name here.
awk -v RS=";" '/INSERT/ { gsub(/^[[:space:]]+/,"",$0);print $0";" }' file

将记录分隔符设置为"0"然后使用INSERT搜索记录。用gsub剥去前导空格并打印。

相关内容

  • 没有找到相关文章

最新更新