gpt4 book ai didi

regex - sed 替换匹配复杂正则表达式模式的文本

转载 作者:行者123 更新时间:2023-11-29 13:04:12 24 4
gpt4 key购买 nike

我正在将现有数据库模式移植到 Postgresql。

我需要用半逗号替换出现的单词 'go'

我注意到文本中出现了“go”这个词,格式如下:

  • [非空字符串 (SQL)]
  • [后跟一行或多行]
  • [后跟一个或多个空格]
  • [后跟单词'go']
  • [后跟一行或多行]

我想用下面的模式替换上面的模式:

  • [非空字符串 (SQL)]
  • [后跟';']
  • [后跟两个新行]

我正在尝试构建一个可以与 sed 一起使用的正则表达式,以执行上述替换 - 但我对正则表达式比较陌生。

为了清楚起见,我在我想要实现的替换之前和之后都包含了示例文本:

-- Original File contents below -------



go
CREATE TABLE foobar
(
f1 INT,
f2 INT,
f3 FLOAT,
f4 VARCHAR(32) NOT NULL,
f5 INT,
f6 datetime,
f7 smallint
)


go

GRANT UPDATE, INSERT, DELETE, SELECT ON foobar TO dbusr
go
CREATE UNIQUE INDEX idxu_foobar ON foobar (f1, f2)

go


--- REPLACED FILE CONTENTS -----------



go
CREATE TABLE foobar
(
f1 INT,
f2 INT,
f3 FLOAT,
f4 VARCHAR(32) NOT NULL,
f5 INT,
f6 datetime,
f7 smallint
);

GRANT UPDATE, INSERT, DELETE, SELECT ON foobar TO dbusr;
CREATE UNIQUE INDEX idxu_foobar ON foobar (f1, f2);

任何人都可以帮助实现这个表达式,所以我可以执行: sed -i 's/original_match_expr/replacement_expr/g' myfile.sql

最佳答案

awk -v RS='\\s*go' '{print $0""(RT ~ /go/? ";\n\n": "")}' file.txt

记录分隔符 RS 设置为 0 个或多个空格字符,后跟 go。 GNU awk 然后将两个连续的记录分隔符实例之间的文本 block 视为一条记录。所以打印记录后跟自定义记录分隔符(; 后跟两个换行符)

关于regex - sed 替换匹配复杂正则表达式模式的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19746237/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com