📄 simphosts
字号:
#!/usr/bin/perl## $Id: simphosts,v 2.0 90/09/11 11:07:41 hakanson Rel $## Simplify hosts(5) format file.# Marion Hakanson (hakanson@cse.ogi.edu)# Oregon Graduate Institute of Science and Technology## Copyright (c) 1990, Marion Hakanson.## You may distribute under the terms of the GNU General Public License# as specified in the README file that comes with the dnsparse kit.## The input file is read, and the mappings are stored up in the order# encountered (earlier ones will override any later ones which may# overlap or otherwise be redundant), in the same manner as that used# by the bsd host-table-based resolution code. When the entire file# has been processed, each address is printed (in the order that they# were encountered) as follows:# addr first-canon-for-addr## Next, the remaining (not yet printed) names are sorted, and each# one is printed, one-per-line, as follows:# first-addr-for-name first-canon-for-name name# (if the two names are identical, only one is printed).## Thus, if we've done the job right, the resulting table (also in legal# hosts(5) format) should be functionally equivalent to the original,# yet in a canonical form which can be compared textually without# having semantically meaningless differences cloud the issue.## Note that if one runs the result through this script another time,# one should end up with the same result yet again.if ( $#ARGV >= $[ ) { open(HOSTS, $ARGV[$[]) || die "Cannot open $ARGV[$[]: $!, aborted";} else { open(HOSTS, "<&STDIN") || die 'Cannot dup STDIN, aborted';}# Print header comments as encounteredwhile ( <HOSTS> ) { last unless ( /^\s*#/ ); print;}exit if ( eof(HOSTS) );# Note that $_ was set from abovedo { # All other comments are removed unless ( /^\s*#/ ) { chop; s/#.*//; ($addr, @names) = split; $canon = $names[$[]; unless ( defined($addr_to_name{$addr}) ) { $addr_to_name{$addr} = $canon; push(@addrlist, $addr); } foreach $name ( @names ) { unless ( defined($name_to_addr{$name}) ) { $name_to_addr{$name} = $addr; push(@namelist, $name); } unless ( defined($name_to_canon{$name}) ) { $name_to_canon{$name} = $canon; } } }} while (<HOSTS>);# First print the addr-to-name mappingsforeach $addr (@addrlist) { $realcanon = $addr_to_name{$addr}; print "$addr\t$realcanon\n"; $printed{$realcanon} = 1;}# A nice separatorprint "#\n";# Now sort the names and print out their data@namelist = sort(@namelist);foreach $name (@namelist) { # Skip those we printed above next if ( $printed{$name} ); $addr = $name_to_addr{$name}; $canon = $name_to_canon{$name}; $realcanon = $addr_to_name{$addr}; print "$addr\t$canon"; print " $name" if ( $name ne $canon ); # Flag an anomaly (but preserve it) if ( $realcanon ne $canon ) { print "\t# HEY! $realcanon should be canonical here"; } print "\n";}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -