对域名和 DNS 记录进行 JQ 字符串操作



我正在尝试学习一些jq,但遇到了麻烦。

我正在使用 DNS 记录数据集,例如{"timestamp":"1592145252","name":"0.127.9.109.rev.sfr.net","type":"a","value":"109.9.127.0"}

我不知道怎么做

  1. 名称字段中去除子域详细信息。 在这个例子中,我只想sfr.net
  2. 向后打印名称,例如:0.127.9.109.rev.sfr.net会变成ten.rfs.ver.901.9.721.0

我的最终目标是打印这样的行:

0.127.9.109.rev.sfr.net,ten.rfs.ver.901.9.721.0,a,sfr.net

谢谢!

若要提取"域"部分,可以使用简单的字符串操作方法来选择它。假设.rev.部分之后的任何内容都是域,您可以这样做:

split(".rev.")[1]

要反转字符串,jq 没有直接对字符串执行此操作的操作。但是,它确实具有反转数组的功能。因此,您可以转换为数组,反向转换,然后再转换回来。

split("") | reverse | join("")

要将它们放在一起以供输入:

.name | [
.,
(split("") | reverse | join("")),
(split(".rev.")[1])
] | join(",")

以下是使用reversecapture的一种方法:

jq -r '
.type as $type
| .name
| "(.),(explode|reverse|implode),($type)," 
+ capture("(?<subdomain>[^.]+[.][^.]+)$").subdomain'

像这样:

$ jq -r '.name' file.json | grep -oE 'w+.w+$'
sfr.net

$ jq -r '.name' file.json | rev
ten.rfs.ver.901.9.721.0

最新更新