我正在尝试学习一些jq,但遇到了麻烦。
我正在使用 DNS 记录数据集,例如{"timestamp":"1592145252","name":"0.127.9.109.rev.sfr.net","type":"a","value":"109.9.127.0"}
我不知道怎么做
从- 名称字段中去除子域详细信息。 在这个例子中,我只想
sfr.net
- 向后打印名称,例如:
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(",")
以下是使用reverse
和capture
的一种方法:
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