这是curl -s ifconfig.me/all | column -t
的示例输出:
ip_addr: 193.136.19.55
remote_host: gwec.di.uminho.pt
user_agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
port: 37429
lang:
connection:
keep_alive:
encoding:
mime: */*
charset:
via:
forwarded:
我喜欢以 user_agent 字段没有获取标签的方式解析它,并删除所有没有结果的字段。
ip_addr: 193.136.19.55
remote_host: gwec.di.uminho.pt
user_agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
port: 37429
mime: */*
答案 0 :(得分:3)
使用awk
,您可以使用awk '$2'
,这将检查第二个字段是否存在。如果确实存在,则会打印该行。
在你的情况下,
curl -s ifconfig.me/all | column -t | awk '$2'
$ awk '$2' your_result
ip_addr: 193.136.19.55
remote_host: gwec.di.uminho.pt
user_agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
port: 37429
mime: */*
我喜欢以user_agent字段不这样的方式解析它 获取标签,并删除没有结果的所有字段。
使用输入字段分隔符(FS = tab)和输出字段分隔符(OFS = space),如下所示:
$ awk 'BEGIN{FS="\t";OFS=" "} $2 {printf "%s\t",$1; for (i=2; i<=NF; i++) printf $i ; printf "\n"}' your_result
ip_addr: 193.136.19.55
remote_host: gwec.di.uminho.pt
user_agent: curl/7.22.0(x86_64-pc-linux-gnu)libcurl/7.22.0OpenSSL/1.0.1zlib/1.2.3.4libidn/1.23librtmp/2.3
port: 37429
mime: */*
答案 1 :(得分:1)
awk 'BEGIN{OFS=" "}NF>1{t=$1;$1="";printf "%-13s%s\n",t,$0}'
使用样本输入输出:
ip_addr: 193.136.19.55
remote_host: gwec.di.uminho.pt
user_agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
port: 37429
mime: */*