Kal*_*sov 0 perl awk grep sed tr
想要从json文件中获取值:
例:
{"ipaddr":"10.1.1.2","hostname":"host2","role":"http","status":"active"},
{"ipaddr":"10.1.1.3","hostname":"host3","role":"sql","status":"active"},
{"ipaddr":"10.1.1.4","hostname":"host4","role":"quad","status":"active"},
Run Code Online (Sandbox Code Playgroud)
预期:
10.1.1.2 host2 http active
10.1.1.3 host3 sql active
10.1.1.4 host4 quad active
Run Code Online (Sandbox Code Playgroud)
我试着用:
grep -Po '(?<=ipaddr\")[^\"]+'
Run Code Online (Sandbox Code Playgroud)
但是只能得到":",就像结果一样,当我开始得到某些东西时,它只有一个.
首先,输入字符串应该是有效的JSON,因此数组元素必须在内部[],最后一个数组元素不应该有尾随逗号.
use strict;
use warnings;
use JSON;
my $s = q(
[
{"ipaddr":"10.1.1.2","hostname":"host2","role":"http","status":"active"},
{"ipaddr":"10.1.1.3","hostname":"host3","role":"sql","status":"active"},
{"ipaddr":"10.1.1.4","hostname":"host4","role":"quad","status":"active"}
]
);
my $aref = decode_json($s);
my @k = qw( ipaddr hostname role status );
print "@$_{@k}\n" for @$aref;
# or
local $" = "|";
print "@$_{@k}\n" for @$aref;
Run Code Online (Sandbox Code Playgroud)
产量
10.1.1.2 host2 http active
10.1.1.3 host3 sql active
10.1.1.4 host4 quad active
Run Code Online (Sandbox Code Playgroud)
10.1.1.2|host2|http|active
10.1.1.3|host3|sql|active
10.1.1.4|host4|quad|active
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
407 次 |
| 最近记录: |