替换多行字符串中第一行的一部分

时间:2014-02-21 11:53:31

标签: regex perl

我有一个包含多行的文件。我使用read_file读取文件,并将整个字符串放入标量字符串。

我的样本文件格式

From : test@gmail.com
To : test1@gmail.com
Subject : Test Mail

所以我的字符串将是这样的,

$mystring = "From : test@gmail.com\nTo : test1@gmail.com\nSubject : Test Mail"

这些是已在From和To字段中使用随机地址生成的模板文件。我想单独使用自定义的字段更改“发件人”字段,如下所示

$mystring = "From : user1@yahoo.com\nTo : test1@gmail.com\nSubject : Test Mail"

我所要做的就是使用perl搜索并替换多行字符串中的From字段。我是perl的新手,并没有很好的接触它。

1 个答案:

答案 0 :(得分:2)

如果您想使用文件作为模板来创建另一个文件,您可以在一行中使用shell重定向以及Perl的-p开关:

perl -pe 's/^From\s*:\s*\K.*/user1\@yahoo.com/' input > output 

这会将替换s/.../.../应用于文件中的所有行,并将输出打印到文件。正则表达式的解释:

  • ^匹配字符串的开头
  • \s*匹配空格0次或更多次
  • \K保留此符号的剩余部分
  • .*匹配除换行符0或更多次以外的任何字符

.*将占用该行的其余部分,\K转义将保留From:部分,然后插入新电子邮件。请注意,您需要转义@字符以防止变量插值。