【发布时间】:2022-01-07 10:19:23
【问题描述】:
我正在尝试从 PostgreSQL 模式转储中捕获 SQL DDL“CREATE”,如下所示:
SET default_table_access_method = heap;
CREATE TABLE schema_name.table_name (
col1 bigint,
col2 text
);
ALTER TABLE schema_name.table_name OWNER TO user;
CREATE INDEX index ON schema_name.table_name USING btree (col1);
我想要的是:
CREATE TABLE schema_name.table_name (
col1 bigint,
col2 text
);`
为什么grep -Po "(CREATE TABLE)[\S\s]*(;)" dump.sql 不起作用?
在 PCRE2 中 /CREATE TABLE [\w]*\.[\w]*[\S\s]*(;)/U 匹配正确。
谢谢。
【问题讨论】:
-
“为什么正则表达式不起作用?” :您需要添加
-z选项来启用多行grep。此外,如果您想使用.*?匹配任何字符,您需要使用s修饰符(请参阅Modifiersperlre)。例如:grep -zPo "(?s)CREATE TABLE.*?;" dump.sql