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

使用curl与grep提取数据格式不符,求按指定格式合并输出

解决方案

问题描述

我已经折腾好几个小时了,还是没解决问题。我想从链接提取id、remote_ip、listen_addr这三个字段,保存到text.txt文件里。现在用的命令是:

curl -s https://pastebin.com/raw/gGt524CS | grep -e "id" -e "remote_ip" -e "listen_addr" | cut -d"\"" -f4 > text.txt

但输出格式不对,现在是每行一个字段值:

9ed1e069802812f484faa68a2c6dd61f6bc1be0b
tcp://0.0.0.0:26656
88.99.61.173
8f1f37f30546275dea1f1e2a9e3828e8565f118d
tcp://0.0.0.0:26656
212.192.222.35
...

我想要把每组三个字段整理成id@remote_ip:端口的格式(端口从listen_addr里提取),最终输出10行,比如:

9ed1e069802812f484faa68a2c6dd61f6bc1be0b@88.99.61.173:26656

解决命令

使用awk按3行一组处理提取到的字段,直接生成目标格式:

curl -s https://pastebin.com/raw/gGt524CS | grep -e "id" -e "remote_ip" -e "listen_addr" | cut -d'"' -f4 | awk '
NR%3 == 1 { id = $0 }
NR%3 == 2 { port = $0; sub(/.*:/, "", port) }
NR%3 == 0 { print id "@" $0 ":" port }
' > text.txt

命令说明

  1. 前半部分和你原来的命令一致:获取内容→过滤目标字段行→提取字段值
  2. awk部分按行号分组处理:
    • 每组第1行(NR%3==1):将内容存入id变量
    • 每组第2行(NR%3==2):提取listen_addr中的端口(通过sub(/.*:/, "", port)去掉最后一个冒号前的所有内容)
    • 每组第3行(NR%3==0):拼接成id@remote_ip:端口格式并输出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 16:03:28