首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在perl中,从文件中删除特定行。

在perl中,从文件中删除特定行。
EN

Stack Overflow用户
提问于 2016-01-25 08:17:56
回答 4查看 4.3K关注 0票数 3

我想用HPOM删除这一行,并且只保留行节点:

我的代码:

代码语言:javascript
复制
#!/usr/bin/perl
use strict;

open (FILE, "/tmp/agentstas.dat");

my @lines = <FILE>;

my $lines;

my $string = "Node";

my $badstring = "hpom";

foreach $lines (@lines) {

    if ($lines =~ $string || $lines !=~ $badstring)  { print "$lines"; }

}

结果:

代码语言:javascript
复制
Node atum1:
HPOM Managed Node status :
Node vmatum3:
HPOM Managed Node status :
Node ls_sfda-new:
HPOM Managed Node status :
Node risto4:
HPOM Managed Node status :
Node jzn18z1:
HPOM Managed Node status :
Node sqlcatom:
HPOM Managed Node status :
Node new-sspc-as:
HPOM Managed Node status :
Node dafna:
HPOM Managed Node status :
Node adonis:
HPOM Managed Node status :
Node hydra:
HPOM Managed Node status :
Node kukuad:
HPOM Managed Node status :
Node janus1:
HPOM Managed Node status :
Node janus2:
HPOM Managed Node status :
Node zubin.extranet.gov.il:
HPOM Managed Node status :
Node nyx-as:
HPOM Managed Node status :
Node keto1:
HPOM Managed Node status :
Node sql12ao1:
HPOM Managed Node status :
Node keto2:
HPOM Managed Node status :
Node durge:
HPOM Managed Node status :
Node vcmanage:
HPOM Managed Node status :
Node vcmobile:
Node vishnu:
HPOM Managed Node status :
Node ram:
HPOM Managed Node status :
Node brizo.iaadom:
HPOM Managed Node status :
Node krishna:
HPOM Managed Node status :
Node mars1:
HPOM Managed Node status :
Node mars2:
HPOM Managed Node status :
Node rasas:
HPOM Managed Node status :
Node hypons.iaadom:
HPOM Managed Node status :
Node nnm-as.iaadom:
HPOM Managed Node status :
Node risto3:
HPOM Managed Node status :
Node ivrmanage.iaadom:
HPOM Managed Node status :
Node mpsair01:
HPOM Managed Node status :
Node mpsland01:
HPOM Managed Node status :
Node atum2.iaadom:
HPOM Managed Node status :
Node vmatum4.iaadom:
HPOM Managed Node status :
Node rastas:
HPOM Managed Node status :
Node nnm-ls.iaadom:
HPOM Managed Node status :
Node rasls:
HPOM Managed Node status :
Node ask1:
HPOM Managed Node status :
Node ask2:
HPOM Managed Node status :
Node grid2:
HPOM Managed Node status :
Node grid1:
HPOM Managed Node status :
Node ivrdb:
HPOM Managed Node status :
Node dafn:
HPOM Managed Node status :
Node mist1:
HPOM Managed Node status :
Node mist2:
HPOM Managed Node status :
Node amun:
HPOM Managed Node status :
Node amun1:
HPOM Managed Node status :
Node dagon:
HPOM Managed Node status :
Node dagon1:
Node davlin2:
HPOM Managed Node status :
Node cet:
HPOM Managed Node status :
Node sdns:
HPOM Managed Node status :
Node pdns:
HPOM Managed Node status :
Node hermes1.iaadom:
HPOM Managed Node status :
Node tyr2:
HPOM Managed Node status :
Node tyr1:
HPOM Managed Node status :
Node new_sspcls:
Node hapy1:
Node geb:
Node saga:
Node indra:
Node yama:
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-01-25 08:43:45

始终使用三个参数和词法文件句柄来执行文件操作。

如果要删除从“HPOM”开始的所有行,可以将代码编写为:

代码语言:javascript
复制
open my $fh, "<", "/tmp/agentstas.dat" or die $!;

my @lines = <$fh>;

foreach my $lines (@lines)
{
    next if ($lines =~ m/^HPOM/i);
    print "$lines";
}

或者更好地使用while loop

代码语言:javascript
复制
while (my $lines = <$fh>)
{
    chomp $lines;
    next if ($lines =~ m/^HPOM/i);
    print "$lines\n";
}

或者在您的代码中更改这一行:

代码语言:javascript
复制
if ($lines =~ $string || $lines !=~ $badstring)  { print "$lines"; }

代码语言:javascript
复制
if ($lines =~ /^$string/i || $lines !~ /^$badstring/i)  { print "$lines"; }

^ =匹配字符串的开头。

i =进行不区分大小写的模式匹配。

i,因为您在小写字母和输入文件中使用了$badstring,所以它是大写字母。

票数 2
EN

Stack Overflow用户

发布于 2016-01-25 10:46:23

对文件名进行硬编码通常是个坏主意。如果您使用Unix过滤器模型(从STDIN读取,写入STDOUT),您的程序将更加灵活。

代码语言:javascript
复制
#!/usr/bin/perl

while (<>) {
  print unless /^HPOM/;
}

将其运行为:

代码语言:javascript
复制
$ ./your_filter.pl < /tmp/agentstas.dat > output_file
票数 3
EN

Stack Overflow用户

发布于 2016-01-25 10:14:16

初始代码太复杂了。试一试:

代码语言:javascript
复制
#!/usr/bin/env perl

use strict;
use warnings; 

open (my $input, '<', "/tmp/agentstas.dat") or die $!;

while ( <$input> ) {
   print if m/^Node/i;
}
close ( $input );
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34987902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档