⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 simphosts

📁 早期freebsd实现
💻
字号:
#!/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 + -