1

这是一个示例输出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:         */*
4

2 回答 2

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:   */*
于 2013-09-23T10:22:40.060 回答
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:         */*
于 2013-09-23T10:40:51.127 回答