在单词中找到一个字符串,并用perl中的另一个替换完整的单词

时间:2014-11-09 08:39:14

标签: regex perl

我想在单词中找到一个字符串,并用perl中的另一个字符串替换整个单词。

例如:我有以下字符串。

my $str =

<schedule environment="sit">
<hours>SIT_HR</hours>
</schedule> 
<schedule environment="uat">
<hours>UAT_HR</hours>
</schedule>
<schedule environment="prd">  
<hours>PRD_HR</hours>
</schedule>

我必须找到* _HR并将其替换为60。

输出:

<schedule environment="sit">
<hours>60</hours>
</schedule> 
<schedule environment="uat">
<hours>60</hours>
</schedule>
<schedule environment="prd">  
<hours>60</hours>
</schedule>

2 个答案:

答案 0 :(得分:0)

您的输入看起来像没有根标记的XML。

我添加了根标记并使用xsh处理了该文件,这是XML::LibXML的包装:

open file.xml ;
for /root/schedule/hours {
    if xsh:matches(., '_HR$' ) set . 60 ;
}
save :b ;

答案 1 :(得分:0)

试试这个。我在XML方面表现不佳。但我完成了你期望的输出。

use warnings;
use strict;
open('file',"file.xml");
my @file = <file>;
print @file if grep{s/.{3}_HR/60/g} @file;

在这里,我将file.xml存储到数组@file

grep用于在数组中找到单词。

然后替换用于替换数组中的sting。