【发布时间】:2015-01-14 02:23:53
【问题描述】:
我有一个文件,我想在其中删除模式后的几行,直到在其下方找到一个空行,然后使用 perl 在模式后添加一个新行。 这是输入文件:
[NAMES]
Mark
Shaun
[MAIL_ADD]
douglas@mail.com
iamshaun@mail.com
mbirenk@mail.com
我想删除每个标题的描述部分并在那里放置新的描述。我的 perl 代码如下,它只将新描述放在每个标题下方。我无法删除旧的描述:
#!/usr/bin/perl -w
use warnings;
open(my $var, "<file.txt");
my @arr = <$var>;
my $cnt =0;
my $description1 = "Biren\nKumar\nStephen"
my $description2 = "rahul123@mail.com\nshael@mail.com"
while($cnt < @arr)
{
my $cur_line = $arr[$cnt];
if ($cur_line =~ s/\[NAMES\]/\[NAMES\]\n$description1/)
{
$arr[$cnt] = $cur_line;
}
elsif ($cur_line =~ s/\[MAIL_ADD\]/\[MAIL_ADD\]\n$description2/)
{
$arr[$cnt] = $cur_line;
}
$cnt++;
}
close($var);
open(my $var1, ">file.txt");
my $cnt1 =0;
while($cnt1 < @arr)
{
print $var1 $arr[$cnt1];
$cnt1++;
}
close $var1;
请帮我解决这个问题。如果您无法理解我的问题,请告诉我,我会尽力澄清更多。
我的输出文件应该如下所示:
[NAMES]
Biren
Kumar
Stephen
[MAIL_ADD]
rahul123@mail.com
shael@mail.com
谢谢
【问题讨论】:
-
您要删除包含描述的整行,还是只删除描述?也许您期望输出的示例会很有用。
-
ok..我正在稍微修改一下我的文件内容,以便您理解。
-
你能把预期的输出轻松解决问题吗?
-
我认为您已经为您未提及或匹配相应输出的输入放置了 2 个不同的文件。你能再检查一次吗?
-
Okiee 我明白你的意思。我已经查看了你修改过的代码!!
标签: perl