每个人都要有一个骨灰级的爱好,不为金钱,而纯粹是为了在这个领域享受追寻真理的快乐。
分类: LINUX
2011-08-25 23:30:53
[解析]
这个谜底没揭晓之前我想用awk,当时真的是想屎了,在此谢谢Tim大师指点,言归正传,首先按照要求要对CREATE TABLE行进行操作,匹配到该行后先把我们要的字段截取出来:
s/.*\((.*)\)./\1/ -- (id1 integer primary key, name2 text, comment text, owner text)
这时候pattern space里的内容就是替换出来的这句,然后第2次替换,把字段名取出来,舍去字符串定义:
s/\([a-z]\+[0-9]*\) [^),]*\([,)]\)/\1\2/g -- (id1, name2, comment, owner)
随后的h把paterrn space内容拷贝到缓冲区,d删除模版内容。
继续执行匹配到INSERT INTO的行,G把缓冲区的内容换行后附加到pattern space里:
INSERT INTO "think_user" VALUES(1,'123',NULL,NULL,NULL);
(id1, name2, passwd, comment, owner)
这就好办了吧,以\n为分割,把前后位置调换一下:
s/\( VALUES.*\)\n\(.*\)/\2\1/ -- INSERT INTO "think_user"(id1, name2, comment, owner) VALUES(1,'123',NULL,NULL);
大家注意,没有标记出的内容是不会有变化的。再次感谢Tim大师的指点和思路,谢谢您。
dragon234523452012-04-01 13:57:14
$ awk 'BEGIN{FS=OFS=", "}x{sub("VALUES",x" VALUES")}/CREATE TABLE/{sub(/CREATE TABLE.*\(/,"(");sub(";","");for(i=1;i<=NF;i++)sub(/ [^)]*/,"",$i);x=$0;next}1' test