如何在linux中显示一行中的特定部分?


-1

假设我有一个包含以下行的文件:

[{"name”:”10.0.0.1”,”address":"10.0.0.1”,”subscriptions["all"],"version":"0.0.0”,”timestamp":1450270166},{"name":"10.0.0.2","address":"10.0.0.2","subscriptions":["all"],"version”:”0.0.0”,”timestamp":1450390819}]

在这里,我需要得到类似的输出

name:10.0.0.1
name:10.0.0.2

任何的想法?


1
这不是有效的JSON。应该是吗?
fedorqui 2015年

尝试awk -F"," '{print $1}' data | sed 's/\[{//' | sed 's/”//g' | sed 's/"//g'
MariusMatutiae 2015年

Answers:


2

如果输入是有效的JSON,请使用jq

jq --raw-output '"name: " + .[].name'

jq --raw-output .[].name | sed "s/^/name: /"

或者jshon

jshon -a -e name -u | sed "s/^/name: /"

或者Perl:

perl -MJSON -E 'say "name: ", $_->{name} for @{from_json(<>)}'

或者Ruby:

ruby -rjson -e 'JSON.load(STDIN).map{|i| puts "name: " + i["name"]}'

如果它不是有效的JSON,但与您的问题完全相同:

perl -n -E 's/“|”/"/g; say "name: $1" while /"name":"(.+?)"/g'

所有命令都希望您的输入为stdin。


从来没有听说过jshon,做得很好!
fedorqui 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.