2013-01-18 40 views
0

這個問題是指符合多數據如何在Perl

How to replace text using greedy approach in sed?

我必須在文件中匹配的多數據,並需要用perl一些其他的文本來替代它們。

貓文件

<strong>ABC 
     </strong> 

perl腳本:code.pl

#!/bin/perl 
open(fh, $ARGV[0]) or die "could not open file\n"; 
while($input = <fh>) 
{ 
     if($input =~/&lt;strong&gt;(.*?)\n(\s)*&lt;\/strong&gt;/) 
     { 
      print($1,"\n"); 
     } 
} 
close(fh); 

perl的code.pl文件

輸出:無輸出

如何解決上述PBLM。

問候

回答

2
use File::Slurp qw(read_file); 

my $string = read_file($ARGV[0]); 

$string =~ s/\&lt;strong&gt;(.*?)&lt;\/strong&gt;/<b>${1}<\/b>/gs; 

print $string; 

此示例使用文件:: Slurp的模塊在整個文件在讀取一次。

然後它使用帶有gs修飾符的正則表達式。 s允許.*?匹配換行符。 g使搜索成爲全局。全局意義,它會查找給定字符串中的所有匹配項。如果沒有g,則只會替換第一個實例。如果您希望搜索不區分大小寫,可以使用i正則表達式修飾符。

${1}是括號內匹配的反向引用。

該示例產生:

<b>ABC 
    </b>