如何确定主机表中哪些 IP 地址可用?

如何确定主机表中哪些 IP 地址可用?

我正在编写一个脚本,该脚本将从 /etc/hosts 文件中读取并确定主机文件中可用的 IP。

主机文件的外观如下:

172.17.164.2 System1
172.17.164.3 System2
172.17.164.4 System3
172.17.164.5 System4
172.17.164.6 System5
172.17.164.7
172.17.164.8
172.17.164.9
172.17.164.10

我的问题是,如何读取每一行并检查第二个字段是否丢失?如果主机文件缺少主机名,则表示 IP 可用。

答案1

您可以使用awk(按照标签的建议)检查给定记录上的字段数是否为 1。要获取“免费”地址列表:

awk '(NF == 1) { print; }' </etc/hosts

/etc/hosts如果您的文件包含注释,那可能太简单了。您可以通过跳过注释行来过滤掉它们:

awk '/^#/ { next; } (NF == 1) { print; }' </etc/hosts

awk脚本是模式(或条件)和操作对:

  • 在第一个脚本中,awk检查NF— 数量领域行(默认情况下以空格分隔),并使用单个字段打印每行。
  • /etc/hosts第二个脚本通过检查以“#”开头的行并跳过对这些行的进一步处理(通过跳到该行)来解决带有注释的文件的问题next

答案2

对于给定的数据,您可以使用grep -v System /etc/hosts.

对于更通用的解决方案,请使用egrep -v "\S+\s+\S+" /etc/hosts,这意味着显示不包含非空格后跟空格的任何行,后跟非空格的内容,例如至少两个单词。

相关内容