例如:
Reply: [200/OK] bytes=29086 time=583ms
我想提取“time =”和“ms”之间的值
预期结果:
“583”
答案 0 :(得分:8)
我会使用sed,但是因为你要求awk:
echo "Reply: [200/OK] bytes=29086 time=583ms" | awk -F'time=|ms' '{print $2}'
-F
定义字段分隔符的扩展正则表达式。因此我们定义“time =”或“ms”分隔字段,然后打印第二个字段。
使用sed,它将是:
echo "Reply: [200/OK] bytes=29086 time=583ms" | sed 's/.*time=\([0-9]*\)ms.*/\1/'
答案 1 :(得分:2)
echo "Reply: [200/OK] bytes=29086 time=583ms" | sed "s/.*time=\(.*\)ms/\1/"
答案 2 :(得分:1)
丑陋但有效:
$ echo "Reply: [200/OK] bytes=29086 time=583ms" |
awk '{print $4'} | sed -e 's/[a-z=]//g'
583
或没有sed
:
$ echo "Reply: [200/OK] bytes=29086 time=583ms" |
awk '{ split($4,a,"="); gsub(/ms/,"", a[2]); print a[2] }'
583
答案 3 :(得分:0)
试试这个
printf "Reply: [200/OK] bytes=29086 time=583ms\n" \
| awk '/^Reply:/{sub(/^.*time=/,"",$0) ;sub(/ms$/,"",$0); print $0}'
我希望这会有所帮助。
P.S。因为您似乎是新用户,如果您得到的答案可以帮助您,请记住将其标记为已接受,并且/或者给它一个+(或 - )作为有用的答案。