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

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

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

[{"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,则使用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'

所有命令都要求您将输入作为标准输入。

相关内容