2011-12-21 36 views
-1
open (HAN1, "<test1.txt") || die "not existing!"; 
open (HAN2, "test2.txt") || die "not existing!"; 

s/nameserver/nameserver/g; 

    print HAN2 $_; 
    } 
close(HAN1); 
close(HAN2); 

从一个文件中的字符串替换为其他文件

test1.txt的

nameserver 10.66.80.10 
nameserver 10.66.80.11 
nameserver 10.66.80.11 

的test2.txt

search test.com 
nameserver 99.66.80.10 
nameserver 98.66.80.11 
nameserver 98.66.80.11 

运行脚本的test2.txt其删除其他字符串后内容。

nameserver 10.66.80.10 
nameserver 10.66.80.11 
nameserver 10.66.80.11 

但想要的结果的test2.txt

search test.com 
nameserver 10.66.80.10 
nameserver 10.66.80.11 
nameserver 10.66.80.11 
+8

[编辑问题](http://stackoverflow.com/posts/8587937/edit)并显示您正在运行的真正的Perl代码。 – daxim 2011-12-21 10:03:46

回答

1

试试这个,

use strict; 
    use warnings; 
    use Data::Dumper; 

    open (HAN1, "<test1.txt") || die "not existing!"; 
    open (HAN2, "<test2.txt") || die "not existing!"; 

    my $current; 
    my @arr1 = <HAN1>; 

    foreach $current (<HAN2>) { 
     unless ($current =~ /nameserver/) { 
      print $current; 
      next; 
     } 
     foreach (@arr1) { 
      my($first,$second) = split (' ',$_); 
      $current =~ s/^(nameserver\s+).+/$_/g; 
      chomp($current); 
      print $current; 
      last; 
     } 
     shift @arr1; 
    } 
close(HAN1); 
close(HAN2); 
+0

我测试了你的脚本,看起来不错,但输出'nameserver'两次。也许它应该是替代命令'$ _',而不是'$ _',并删除下一个'chomp'命令或在下一个'print'中添加'\ n' – Birei 2011-12-21 11:49:51

+0

将第18行替换为“$ current =〜s/^(nameserver \ s +)。+/$ _/g; “。 – 2011-12-21 11:54:30

+0

是的,这也适用。 – Birei 2011-12-21 11:59:57

相关问题