วิธีการแสดงส่วนเฉพาะจากบรรทัดใน 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

ลองawk -F"," '{print $1}' data | sed 's/\[{//' | sed 's/”//g' | sed 's/"//g'
MariusMatutiae

คำตอบ:


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 -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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.