首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Perl多行替换文件中的多个位置

Perl多行替换文件中的多个位置
EN

Stack Overflow用户
提问于 2015-05-28 05:47:13
回答 1查看 70关注 0票数 1

我有一个包含以下内容的文件temp.txt

代码语言:javascript
复制
CREATE  TABLESPACE TSASNCA
 IN NODEGROUP IBMCATGROUP
 PAGESIZE 8192
 MANAGED BY DATABASE
 USING
(
 FILE 'TSASNCA' 482M
)
 EXTENTSIZE 8
 BUFFERPOOL DPROPR8KBP;

CREATE  TABLESPACE TSASNUOW
 IN NODEGROUP IBMCATGROUP
 PAGESIZE 8192
 MANAGED BY DATABASE
 USING
(
 FILE 'TSASNUOW' 10M
)
 EXTENTSIZE 8
 BUFFERPOOL DPROPR8KBP;

在上面的文件中,我想用MANAGED BY AUTOMATIC STORAGE替换从"MANAGED BY DATABASE“开始,以")”结尾的两次或n次文本。

我尝试了下面的方法,它似乎很贪婪,从第一次出现MANAGED BY DATABASE到最后一次出现),它匹配了所有内容

代码语言:javascript
复制
perl -0777 -pe 's/MANAGED BY DATABASE.*\)/MANAGED BY AUTOMATIC STORAGE/sg' temp.txt
CREATE  TABLESPACE TSASNCA
 IN NODEGROUP IBMCATGROUP
 PAGESIZE 8192
 MANAGED BY AUTOMATIC STORAGE
 EXTENTSIZE 8
 BUFFERPOOL DPROPR8KBP;

这不是我想要的。然后我试着消除贪婪,但仍然没有运气:

代码语言:javascript
复制
perl -0777 -pe 's/MANAGED BY DATABASE.*\)+?/MANAGED BY AUTOMATIC STORAGE/sg' temp.txt
CREATE  TABLESPACE TSASNCA
 IN NODEGROUP IBMCATGROUP
 PAGESIZE 8192
 MANAGED BY AUTOMATIC STORAGE
 EXTENTSIZE 8
 BUFFERPOOL DPROPR8KBP;
EN

回答 1

Stack Overflow用户

发布于 2015-05-28 06:23:40

我不确定我是否很好地理解了您的问题,但是您可以使用这个正则表达式:

代码语言:javascript
复制
\*\*.*?\*\*       with S flag (single line)
                  or
(?s)\*\*.*?\*\*   with S inline flag
                  or
\*\*[\s\S]*?\*\*  without S flag

您的输出将是:

代码语言:javascript
复制
CREATE  TABLESPACE TSASNCA
 IN NODEGROUP IBMCATGROUP
 PAGESIZE 8192
 **MANAGED BY AUTOMATIC STORAGE**
 EXTENTSIZE 8
 BUFFERPOOL DPROPR8KBP;

CREATE  TABLESPACE TSASNUOW
 IN NODEGROUP IBMCATGROUP
 PAGESIZE 8192
 **MANAGED BY AUTOMATIC STORAGE**
 EXTENTSIZE 8
 BUFFERPOOL DPROPR8KBP;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30493723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档