我是perl的新手,没有任何其他编程语言的编程经验。我试图使用do-while循环删除/跳过几行。我正在尝试删除/跳过两个代码之间的数据:<worker>
和</workers>
。
代码:
if($work=/^<worker>/)
{
do
{
delete $work[$i];
++$i;
}
print $work,"\n";
}
答案 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::TreeBuilder
或XML::Twig
答案 2 :(得分:0)
while (<>) {
print unless m|<worker>| .. m|</workers>|;
}
在不同的标签上开始和结束似乎有些奇怪。他们都应该是“工人”还是“工人”?