我正在编写一个脚本,该脚本将从 /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
,这意味着显示不包含非空格后跟空格的任何行,后跟非空格的内容,例如至少两个单词。