在perl中删除行
我是perl新手,以前没有任何其他编程语言的编程经验。我正在尝试使用do while循环删除/跳过几行。我正在尝试删除/跳过两个标记之间的数据:在perl中删除行,perl,Perl,我是perl新手,以前没有任何其他编程语言的编程经验。我正在尝试使用do while循环删除/跳过几行。我正在尝试删除/跳过两个标记之间的数据:和 代码: if($work=/^/) { 做 { 删除$work[$i]; ++$i; } 打印$work,“\n”; } 我假设您希望跳过标记和之间的数据。你需要使用。。正则表达式中的 这是一个单行程序 perl -ne 'print unless /<workers>/../<\/workers>/' <file_na
和
代码:
if($work=/^/)
{
做
{
删除$work[$i];
++$i;
}
打印$work,“\n”;
}
我假设您希望跳过标记
和
之间的数据。你需要使用。。正则表达式中的
这是一个单行程序
perl -ne 'print unless /<workers>/../<\/workers>/' <file_name>
perl-ne'除非打印//../'
如果要在脚本中执行此操作,请在从文件中读取一行后添加此行
next if /<worker>/../<\/workers>/;
next if//../;
您可以从brian d foy开始使用这个非常好的perl,我假设您有如下数据:
my $x = <<END;
Text to keep
<worker> text to be deleted </worker>
Text to keep again
<worker>
Text to be deleted
</worker>
END
my$x=while(){
除非m | | |…m | |打印;
}
在不同的标签上开始和结束似乎有点奇怪。他们应该都是“工人”还是“工人”?如何申报$work?它是一个数组吗?代码中没有“do-while”循环。if($work=/^/)
中的等号=
可能是绑定操作符=~
。另外,不推荐在数组上使用delete
。与delete$work[$i]
不同,您可能需要拼接(@work,$i,1)
或类似的东西,具体取决于$i
的初始值。具体取决于数据的大小,您可能想尝试ie模块来帮助您解决这个问题。感谢您的快速帮助。我还有一个问题,如果我有ABNDFD如何打印ABNDFD@nandini看起来您正在解析一个xml文件,我建议您使用像xml::simple这样的模块,通过它您可以读取xml并将其转换为哈希。无论如何,对于你的问题,答案是使用正则表达式if($line=~/(.*)/){$var=$1;}
$var
将包含两个标记之间的所有内容。我强烈建议你阅读我在回答中提到的演示文稿,所有这些对你来说都是微不足道的。很多时候,我会仔细阅读你提到的演示文稿。这很有帮助,还有一个问题吗?如何在两个html标记之间打印术语。例如-ABCFE如何仅打印ABCFE$text=~/(.*)/si;打印$1
@yko--非常感谢您的帮助
my $x = <<END;
Text to keep
<worker> text to be deleted </worker>
Text to keep again
<worker>
Text to be deleted
</worker>
END
$x =~ s/<worker>.*?<\/worker>//g;
$x =~ s/<worker>.*?<\/worker>/<worker><\/worker>/g;
<worker> lalala <worker> bababa </worker> lalala </worker>
while (<>) {
print unless m|<worker>| .. m|</workers>|;
}