我正在尝试从如下所示的 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
中匹配正确。
谢谢。
最佳答案
sed
会是更好的工具:
sed -n '/^CREATE TABLE/,/;$/p' file.sql
CREATE TABLE schema_name.table_name (
col1 bigint,
col2 text
);
如果您真的想要 gnu-grep
解决方案,请使用:
grep -zPo "(?m)^CREATE TABLE[^;]+;\R" file.sql
CREATE TABLE schema_name.table_name (
col1 bigint,
col2 text
);
关于regex - 使用 grep 捕获组正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70619735/