我有一个.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剥去前导空格并打印。