awk - Bash 脚本 - 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,
customer_id integer,
company_id integer,
balance_cents bigint,
created_at timestamp,
updated_at timestamp
);
COMMIT;
我打算只更改CREATE
部分,使其如下所示:
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 脚本和在 bash 脚本中将CREATE TABLE
行更改为行?INSERT INTO
AWK
SED
我已成功创建INSERT INTO
线条,但我仍然无法弄清楚如何替换CREATE TABLE
线条
注意:我尝试搜索相同或类似的问题,但仍然找不到与我相同的情况。
解决方案
请试试这个:
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_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
推荐阅读
- windows - 使 IIS 使用 ::1 获取默认网站,而不仅仅是使用 127.0.0.1
- swift - 我可以使用与 Equatable 不同的属性来遵守 Hashable 吗?
- c# - C# Lambda 中的自定义 AWS X-Ray 跟踪
- python - Scrapy runspider 命令行参数
- python - 证明时如何摆脱字符串中的随机撇号?
- css - 如何减少名称之间的空格
- arrays - 如何将 json 对象的 json 数组合并到单个 json 对象
- r - 同一图中的两个图形表示
- r - 使用 forcats 将数字列更改为因子
- amazon-web-services - 如何将 xray trace id 发送到 AWS 上的 API 网关?