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

如何仅用jq提取cname匹配comodoca.com的记录Line值?

纯jq实现提取指定CNAME记录的Line数值

需求说明

从给定的DNS zone JSON数据中,提取所有cname字段后缀为comodoca.com的记录对应的Line数值,期望输出:

97
114

输入JSON数据

{
  "data": {
    "zone": [
      {
        "record": [
          {
            "Line": 1,
            "raw": "; cPanel first:11.25.0-CURRENT_46156 (update_time):1708598274 Cpanel::ZoneFile::VERSION:1.3 hostname:server2.something.com latest:110.0.23",
            "type": ":RAW"
          },
          {
            "Line": 4,
            "Lines": 1,
            "class": "IN",
            "expire": "1209600",
            "minimum": "86400",
            "mname": "ns1.something.com",
            "name": "domain.com.",
            "refresh": "3600",
            "retry": "1800",
            "rname": "noreply.something.com",
            "serial": "2024022220",
            "ttl": 86400,
            "type": "SOA"
          },
          {
            "Line": 6,
            "address": "195.216.197.40",
            "class": "IN",
            "name": "ftp.domain.com.",
            "ttl": 60,
            "type": "A"
          },
          {
            "Line": 97,
            "class": "IN",
            "cname": "0c960d0901ed2ec4ae18f39c5dcf547e.b3778944564d3daa444a04e58f3b1649.comodoca.com",
            "name": "_f0ff734bef4f3db24a0dc94fc6b1d21a.fab.domain.com.",
            "ttl": 60,
            "type": "CNAME"
          },
          {
            "Line": 114,
            "class": "IN",
            "cname": "eaf925d9c7f0fbe3e1abcaa94671918b.814242e76a38aea40755b96ee978a9fc.comodoca.com",
            "name": "_671f4707fe0a8b2443fc93fe3a7a7a1d.www.software.domain.com.",
            "ttl": 60,
            "type": "CNAME"
          }
        ]
      }
    ]
  },
  "metadata": {
    "command": "dumpzone",
    "reason": "Zone Serialized",
    "result": 1,
    "version": 1
  }
}

原有实现方式

通过jq结合grep、awk完成,命令如下:

jq --raw-output '.data.zone[].record[] | (.Line|tostring) + "," + .cname ' | grep -i 'comodoca.com' | awk -F, '{ print $1}'

问题

尝试以下jq命令未生效,希望找到纯jq的解决方案:

jq --raw-output '.data.zone[].record[] | select(endswith("comodoca.com"))]'

纯jq解决方案

可行命令

jq --raw-output '.data.zone[].record[] | select(.cname != null and .cname | endswith("comodoca.com")) | .Line'

命令解释

  • .data.zone[].record[]:遍历JSON中所有的DNS记录条目
  • select(.cname != null and .cname | endswith("comodoca.com")):
    • 先筛选出存在cname字段的记录,避免无该字段的条目报错
    • 再判断cname字段的值是否以comodoca.com结尾
  • .Line:提取符合条件记录的Line数值
  • --raw-output:输出原始数值,避免包裹引号

执行结果

97
114

原命令失效原因

之前的命令未指定判断的字段是.cname,且没有过滤无cname字段的条目,导致无法正确匹配目标记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 18:38:10