2011-12-21 34 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

相關問題