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

时间:2015-05-27 21:47:13

标签: regex perl

我有一个文件.tablecorner { -moz-box-shadow: 0 0 15px 8px #000, inset 1px 1px 15px 5px rgba(0,0,0,0.75); -webkit-box-shadow: 0 0 15px 8px#000, inset 1px 1px 15px 5px rgba(0,0,0,0.75); box-shadow: 0 0 15px 8px #000, inset 1px 1px 15px 5px rgba(0,0,0,0.75); } ,其中包含以下内容:

temp.txt

在上面的文件中,我想替换从" MANAGED BY DATABASE"开始的两个或n个文本。并以")"结束与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的所有内容:

)

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

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;

1 个答案:

答案 0 :(得分:0)

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

\*\*.*?\*\*       with S flag (single line)
                  or
(?s)\*\*.*?\*\*   with S inline flag
                  or
\*\*[\s\S]*?\*\*  without S flag

<强> Working demo

您的输出将是:

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;