删除perl中的行

时间:2011-11-16 01:04:58

标签: perl

我是perl的新手,没有任何其他编程语言的编程经验。我试图使用do-while循环删除/跳过几行。我正在尝试删除/跳过两个代码之间的数据:<worker></workers>

代码:

if($work=/^<worker>/)
{
   do
       {
         delete $work[$i];
                  ++$i;
                     }
       print $work,"\n";
}

3 个答案:

答案 0 :(得分:1)

我假设您要跳过标记<workers></workers>之间的数据。你需要在正则表达式中使用..

这是一个单行的

perl -ne 'print unless /<workers>/../<\/workers>/' <file_name>

如果您想在脚本中执行此操作,请在从文件

中读取一行后添加此行
next if /<worker>/../<\/workers>/;

你可以通过 brian d foy

开始使用非常好的presentation perl

答案 1 :(得分:0)

我假设您有以下数据:

my $x = <<END;

Text to keep
<worker> text to be deleted </worker>
Text to keep again
<worker>
Text to be deleted
</worker>
END

如果您还想删除<worker></worker>代码:

$x =~ s/<worker>.*?<\/worker>//g;

如果您需要保留标签:

$x =~ s/<worker>.*?<\/worker>/<worker><\/worker>/g;

但是,只有在您可以保证<worker>标签不嵌套的情况下,这才有效。以下字符串将导致错误:

<worker> lalala <worker> bababa </worker> lalala </worker>

为了做到这一点,你需要使用像HTML::TreeBuilderXML::Twig

这样的解析模块。

答案 2 :(得分:0)

while (<>) {
  print unless m|<worker>| .. m|</workers>|;
}

在不同的标签上开始和结束似乎有些奇怪。他们都应该是“工人”还是“工人”?