如何修正curl输出格式:去除逗号并解决空行与对齐问题
解决ipinfo.io输出格式调整问题
方案一:用jq处理JSON(推荐)
因为ipinfo.io返回的是标准JSON数据,用jq工具直接提取并格式化是最可靠的方式,避免正则处理的各种问题:
# 提取指定字段并按目标格式输出 INFOISP=$(curl --silent ipinfo.io | jq -r '"ip": "\(.ip)"', '"hostname": "\(.hostname)"', '"region": "\(.region)"', '"country": "\(.country)"', '"org": "\(.org)"') echo "$INFOISP"
输出结果直接符合期望:
"ip": "186.152.174.190" "hostname": "host190.186-152-174.telecom.net.ar" "region": "Santa Fe" "country": "AR" "org": "AS7303 Telecom Argentina S.A."
方案二:改进原有sed命令
你之前的问题出在echo ${INFOISP}没有加双引号,导致shell把变量内的换行符替换成空格,进而产生多余空行。修改后可以解决:
INFOISP=$(curl --silent ipinfo.io | grep -E '"ip"|"hostname"|"region"|"country"|"org"') # 加双引号保留换行,同时去掉逗号和行首空格 echo "$INFOISP" | sed -e 's/,//g' -e 's/^ //'
解释:
s/,//g:移除所有行尾的逗号s/^ //:移除行首的两个空格(匹配原输出的缩进)
方案三:用awk一步处理
不需要保存变量,直接通过awk完成过滤、格式调整:
curl --silent ipinfo.io | awk '/"ip"|"hostname"|"region"|"country"|"org"/ { gsub(/,/, ""); # 去掉逗号 sub(/^ /, ""); # 去掉行首缩进 print # 输出处理后的行 }'
内容的提问来源于stack exchange,提问作者Emanuel
相关产品推荐
相关产品推荐

