我有一个使用命令转储到 sql 的数据库create table
,我需要创建一个脚本来将给定的命令应用于某些对象,例如删除表作为示例。
例如,在删除表的情况下,我扫描以开头的行create table
并使用命令提取第三个字段cut
。之后,我想在每个输出行前面添加一个命令,例如drop table
后跟cascade;
或其他合适的命令。
我现在使用的命令是cat datadump.sql | cut -d ' ' -f 1-3 | grep 'CREATE TABLE' | uniq | cut -d ' ' -f 3
.
这会输出一个类似的列表
table1
table2
table3
我想转换成
drop table table1 cascade;
drop table table2 cascade;
等并将其保存为需要时运行的文件。事实上,我想让前缀和后缀以输入为条件,但现在简单的文字文本就足够了。
以下是评论中要求的一些示例输入:
CREATE TABLE agency (
agrecordid integer DEFAULT nextval(('agency0_pk_seq'::text)::regclass) NOT NULL,
agidcode1 character(20) NOT NULL,
...,
...,
agaddress1 character(40),
agtown character(40),
agfax2 character(20),
agemail character(20)
);
CREATE TABLE agency_contact (
recordid integer DEFAULT nextval(('agencon0_pk_seq'::text)::regclass) NOT NULL,
agencyid integer,
name character varying(35),
...,
...,
email2 character varying(30),
deptorperson character(1),
notes text
);
答案1
使用 Awk(并假设您希望捕获的输出是第三个字段):
awk '/CREATE TABLE/ {printf "%s\n", "drop table "$3" cascade;"}' datadump.sql
drop table agency cascade;
drop table agency_contact cascade;