Awk sed用于提取多行文本的单位

Awk sed用于提取多行文本的单位,awk,sed,Awk,Sed,我有一个SQL转储,只想提取CREATE TABLE语句,不带注释。以下是文件内容的外观: ... -- -- Name: static_data_agencyprogram; Type: TABLE; Schema: llcdb; Owner: llc_app -- CREATE TABLE static_data_agencyprogram ( id integer NOT NULL, source_branch_list text NOT NULL, fac_id pu

我有一个SQL转储,只想提取CREATE TABLE语句,不带注释。以下是文件内容的外观:

...
--
-- Name: static_data_agencyprogram; Type: TABLE; Schema: llcdb; Owner: llc_app
--

CREATE TABLE static_data_agencyprogram (
   id integer NOT NULL,
   source_branch_list text NOT NULL,
   fac_id public.citext NOT NULL,
   "limit" double precision NOT NULL,
   business_line_id integer NOT NULL
);


ALTER TABLE static_data_agencyprogram OWNER TO llc_app;
...
我尝试了以下方法来匹配“创建表”,将下一行追加到模式空间,如果该行以“;”开头,则打印模式空间:


结果不符合我的期望。有人能帮忙吗?

使用空记录分隔符直接使用
awk

awk -v RS= '/^CREATE TABLE /' file.sql

直接使用
awk
使用空记录分隔符:

awk -v RS= '/^CREATE TABLE /' file.sql

你能试试下面的吗。只打印
CREATE TABLE
语句

awk'
!核因子{
found=“”
}
/创建表/{
发现=1
}
建立
'输入文件

说明:只需在行中查找字符串
创建表
,如果找到了,则将查找设置为
1
。然后检查条件,如果发现不为空,则打印该行。现在进入第一个条件
!NF
这意味着在空行上使找到的变量为null,从该行开始停止打印,直到下一个
CREATE TABLE
即将到来。

请尝试以下操作。只打印
CREATE TABLE
语句

awk'
!核因子{
found=“”
}
/创建表/{
发现=1
}
建立
'输入文件
说明:只需在行中查找字符串
创建表
,如果找到了,则将查找设置为
1
。然后检查条件,如果发现不为空,则打印该行。现在进入第一个条件
!NF
这意味着在空行上使找到的变量为null,从该行开始停止打印,直到下一个
CREATE TABLE
开始

CREATE TABLE static_data_agencyprogram (
   id integer NOT NULL,
   source_branch_list text NOT NULL,
   fac_id public.citext NOT NULL,
   "limit" double precision NOT NULL,
   business_line_id integer NOT NULL
);