我正在处理最后一个perl脚本来更新我的/ etc / hosts文件,但是我很困惑并且想知道是否有人可以帮忙吗?
我有一个带有IP的文本文件,需要让我的perl脚本读取这个,这已经完成,但现在我仍然坚持更新/ etc / hosts文件。
到目前为止我的脚本是:
#!/usr/bin/perl
use strict;
my $ip_to_update;
$ip_to_update = `cat /web_root/ip_update/ip_update.txt | awk {'print \$5'}` ;
print "ip = $ip_to_update";
然后我需要在/ etc / hosts中找到一个条目,如
remote.host.tld 192.168.0.20
所以我知道我需要解析它为remote.host.tld,然后替换第二位,但因为ip不会相同我不能直接替换。
任何人都可以帮助最后一点,因为我卡住了:(
三江源!
答案 0 :(得分:1)
您的替换将如下所示:
s#^.*\s(remote\.host\.tld)\s*$#$ip_to_update\t$1#
替换可以在一行中完成:
perl -i -wpe "BEGIN{$ip=`awk {'print \$5'} /web_root/ip_update/ip_update.txt`} s#^.*\s(remote\.host\.tld)\s*$#$ip\t$1#"'
答案 1 :(得分:0)
好的,我更新了我的脚本以包含文件编辑等所有内容。可能不是最好的方法,但它有效:)
#!/usr/bin/perl
use strict;
use File::Copy;
my $ip_to_update; # IP from file
my $fh_r; # File handler for reading
my $fh_w; # File handler for writing
my $file_read = "/etc/hosts"; # File to read in
my $file_write = "/etc/hosts.new"; # File to write out
my $file_backup = "/etc/hosts.bak"; # File to copy original to
# Awks the IP from text file
$ip_to_update = `/bin/awk < /web_root/ip_update/ip_update.txt {'print \$5'}` ;
# Open File Handlers
open( $fh_r, '<', $file_read ) or die "Can't open $file_read: $!";
open( $fh_w, '>', $file_write ) or die "Can't open $file_write: $!";
while ( my $line = <$fh_r> )
{
if ( $line =~ /remote.host.tld/ )
{
#print $fh_w "# $line";
}
else
{
print $fh_w "$line";
}
}
chomp($ip_to_update); # Remove newlines
print $fh_w "$ip_to_update remote.host.tld\n";
# Prints out new line with new ip and hostname
# Close file handers
close $fh_r;
close $fh_w;
move("$file_read","$file_backup"); # Moves original file to .bak
move("$file_write","$file_read"); # Moves new file to original file loaction