You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用nslookup筛选不含指定IP的.com域名脚本问题求助

解决nslookup结果筛选双IP的问题

修改后的脚本方案一(直观易懂)

SUB='.com'
> com.txt  # 清空目标文件,避免重复执行时内容冗余
for address in $(cat linux.hosts); do
  if [[ "$address" == *"$SUB"* ]]; then
    echo "Processing [$address]"
    # 捕获当前域名的nslookup解析结果
    lookup_result=$(nslookup "$address")
    # 检查结果中是否不存在两个目标IP的任意一个
    if ! echo "$lookup_result" | grep -qE '155\.55\.66\.55|155\.55\.66\.54'; then
      # 符合条件则写入文件,添加分隔线方便区分不同域名
      echo "$lookup_result" >> com.txt
      echo "---" >> com.txt
    fi
  fi
done

修改后的脚本方案二(纯awk处理)

SUB='.com'
> com.txt
for address in $(cat linux.hosts); do
  if [[ "$address" == *"$SUB"* ]]; then
    echo "Processing [$address]"
    nslookup "$address" | awk '
      BEGIN { has_bad_ip = 0 }
      # 检测到目标IP则标记
      /155\.55\.66\.55|155\.55\.66\.54/ { has_bad_ip = 1 }
      # 记录所有解析行
      { lines[NR] = $0 }
      # 结束时判断:无坏IP则输出所有记录
      END {
        if (!has_bad_ip) {
          for (i=1; i<=NR; i++) print lines[i]
          print "---"
        }
      }' >> com.txt
  fi
done

原脚本失效原因

原脚本中awk的逻辑错误:!/155.55.66.55/ || !/155.55.66.54/ 等价于!(/IP1/ && /IP2/),意思是只要行内不同时包含两个IP就保留。这会导致只要行里没有其中一个IP,哪怕包含另一个,也会被写入文件,完全不符合“解析结果不包含两个IP中任意一个”的需求。

优化说明

  • 使用$(cat linux.hosts)替代反引号,更符合现代shell语法规范
  • 给变量address加双引号,避免域名含特殊字符时解析出错
  • 开头清空com.txt,防止多次执行后内容重复
  • 添加---分隔不同域名的解析结果,提升可读性

内容的提问来源于stack exchange,提问作者Abby

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 02:24:39