Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在perl中删除行_Perl - Fatal编程技术网

在perl中删除行

在perl中删除行,perl,Perl,我是perl新手,以前没有任何其他编程语言的编程经验。我正在尝试使用do while循环删除/跳过几行。我正在尝试删除/跳过两个标记之间的数据:和 代码: if($work=/^/) { 做 { 删除$work[$i]; ++$i; } 打印$work,“\n”; } 我假设您希望跳过标记和之间的数据。你需要使用。。正则表达式中的 这是一个单行程序 perl -ne 'print unless /<workers>/../<\/workers>/' <file_na

我是perl新手,以前没有任何其他编程语言的编程经验。我正在尝试使用do while循环删除/跳过几行。我正在尝试删除/跳过两个标记之间的数据:

代码:

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>|;
}