Bash脚本-AWK,SED组合
我有Bash脚本-AWK,SED组合,awk,sed,Awk,Sed,我有.sql文件,其中包含以下查询: begin; CREATE TABLE public_local.account ( id bigint, title text, phone_prefix_list_id bigint, company_account_id bigint, created_at timestamp, updated_at timestamp ); COMMIT; begin; CREATE TABLE public_local.phones ( id integer,
.sql
文件,其中包含以下查询:
begin;
CREATE TABLE public_local.account (
id bigint,
title text,
phone_prefix_list_id bigint,
company_account_id bigint,
created_at timestamp,
updated_at timestamp
);
COMMIT;
begin;
CREATE TABLE public_local.phones (
id integer,
customer_id integer,
company_id integer,
balance_cents bigint,
created_at timestamp,
updated_at timestamp
);
COMMIT;
我打算只更改创建
部分,使其如下所示:
begin;
INSERT INTO public_global.account SELECT * FROM public.dblink('mercury_local','SELECT * FROM account') as account(
id bigint,
title text,
phone_prefix_list_id bigint,
company_account_id bigint,
created_at timestamp,
updated_at timestamp
);
COMMIT;
begin;
INSERT INTO public_global.phones SELECT * FROM public.dblink('mercury_local','SELECT * FROM phones') as phones(
id integer,
customer_id integer,
company_id integer,
balance_cents bigint,
created_at timestamp,
updated_at timestamp
);
COMMIT;
如何在bash脚本中使用AWK
和SED
将CREATE TABLE
行更改为INSERT-INTO
行
我已经成功地在行中创建了插入,但是我仍然不知道如何替换创建表
行
注意:我试图搜索相同或类似的问题,但仍然找不到与我相同的情况。请尝试以下操作:
sed '/CREATE TABLE public_local/s/CREATE TABLE public_local.\([a-zA-Z]*\)/INSERT INTO public_global.\1 SELECT * FROM public.dblink(\x27mercury_local\x27,\x27SELECT * FROM \1\x27) as \1/' file.sql
所以要扩展变量,需要使用双引号“
,并将变量作为${variable\u name}
放在里面,我尝试了下面的脚本,它成功了:
#!/usr/bin/bash
country="global"
sed "/CREATE TABLE public_local/s/CREATE TABLE public_local\.\([a-zA-Z_]*\)/INSERT INTO public_${country}.\1 SELECT * FROM public.dblink(\x27mercury_${country}\x27,\x27SELECT * FROM \1\x27) as \1/" file.sql
谢谢你的回答,但是sed可以使用shell变量吗?因为我需要在行中添加一些变量also@buzzing_bee是的,使用双引号而不是单引号,将${varName}
放在里面,并使用escape处理一些扩展。hi@Tiw,在我再次尝试使用您的sed之后,这是唯一的更改(替换)第一个\1是\uuu插入到public\u global中。\1
,之后的\1
没有被替换。括号内和后面的那一个是as
我使用的是sed(GNU sed)4.4和Ubuntu 18.04 LTS。我直接从这里复制了sed命令,只是在regex\([a-zA-Z]*\)
注意正方形末尾的下划线bracket@buzzing_bee这很奇怪…它应该能用在我身上。你是在其他东西里面使用它吗,比如某种脚本?