regex - 使用 grep 捕获组正则表达式

标签 regex perl awk sed grep

我正在尝试从如下所示的 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/

相关文章:

javascript - JS 正则表达式用于匹配 URL 中的不同 #tags

regex - Perl 正则表达式,其中模式是从 linux 命令输出的

perl - 如何在mod_perl2下的startup.pl中学习DOCUMENT_ROOT?

lwp - 不带命名参数的 REST HTTP DELETE

php - 从分隔字符串中删除开头或结尾的逗号

c# regex 查找和替换重用匹配文本的一部分

regex - 正则表达式可以处理嵌套操作吗?

linux - 使用 awk 搜索多个条件字符串

regex - 如何在没有 mod_rewrite 的情况下重定向除一个路径及其所有子路径之外的所有 URL?

awk - 比较 awk 中的当前行和下一行