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

如何实现grep -v结合-A/B功能并格式化nslookup输出?

解决nslookup批量查询后的格式精简问题

方法一:用awk直接处理批量输出

直接在原循环命令后追加awk处理,提取关键字段并格式化输出:

for i in {1..12}; do
  nslookup hostname1.fqdn ns$i.provider.fqdn
  nslookup hostname2.fqdn ns$i.provider.fqdn
done | awk '
/^Server:/ { dns = $2 }
/^Name:/ { host = $2 }
/^Address: / && !/^Address:.*#/ { printf "DNS: %s HOST: %s IP: %s\n", dns, host, $2 }
'

逻辑说明:

  • 匹配Server:开头的行,提取DNS服务器地址存入变量dns
  • 匹配Name:开头的行,提取查询的主机名存入变量host
  • 匹配Address:开头且不含端口号(即不带#)的行,输出格式化后的结果

方法二:逐查询独立处理(更可靠)

改进循环结构,把每个域名+DNS服务器的查询单独交给awk处理,避免跨查询的字段干扰:

for i in {1..12}; do
  for target_host in hostname1.fqdn hostname2.fqdn; do
    nslookup "$target_host" "ns$i.provider.fqdn" | awk -v dns="ns$i.provider.fqdn" -v host="$target_host" '
    /^Address: / && !/^Address:.*#/ { printf "DNS: %s HOST: %s IP: %s\n", dns, host, $2 }
    '
  done
done

优势:

  • 直接将DNS服务器和目标域名作为变量传入awk,无需依赖nslookup输出的Server/Name字段,避免输出格式变动导致的错误
  • 每个查询独立处理,逻辑更清晰

为什么之前的grep方法无效?

grep默认按单行处理,-E中的\n无法匹配实际换行(除非使用-z参数将输入视为null分隔的块),且grep不擅长关联多行字段进行格式化,这类场景下awk/sed是更合适的工具。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 11:23:31