ฉันไม่สามารถใช้คำตอบใด ๆ ที่นี่ ไม่มี jq ที่พร้อมใช้งาน, ไม่มีอาร์เรย์เชลล์, ไม่ประกาศ, ไม่มี grep -P, lookbehind และ lookahead, Python, Perl ไม่มี, Ruby ไม่มี, ไม่ - แม้แต่ Bash ... คำตอบที่เหลืออยู่ใช้งานได้ดี จาวาสคริปต์ฟังดูคุ้นเคย แต่ตัวกระป๋องบอกว่า Nescaffe - มันก็ไม่เป็นไรเหมือนกัน :) แม้ว่าจะมีให้สำหรับความต้องการง่ายๆของฉัน - พวกมันจะ overkill และช้า
แต่มันเป็นสิ่งสำคัญอย่างยิ่งสำหรับฉันที่จะได้รับตัวแปรมากมายจากการตอบกลับในรูปแบบ json ของโมเด็มของฉัน ฉันกำลังทำมันในดวลจุดโทษด้วย BusyBox ลงที่เราเตอร์ของฉัน! ไม่มีปัญหาในการใช้ awk เพียงอย่างเดียว: เพียงตั้งค่าตัวคั่นและอ่านข้อมูล สำหรับตัวแปรเดียวนั่นคือทั้งหมด!
awk 'BEGIN { FS="\""; RS="," }; { if ($2 == "login") {print $4} }' test.json
จำฉันได้ไหม? ฉันต้องกำหนดภายในข้อมูลที่แยกวิเคราะห์ awk ให้กับตัวแปร 11 ตัวที่ฉันต้องการในเชลล์สคริปต์ เมื่อใดก็ตามที่ฉันดูนั่นก็บอกว่าเป็นภารกิจที่เป็นไปไม่ได้ ไม่มีปัญหาด้วยเช่นกัน
ทางออกของฉันง่าย รหัสนี้จะ: 1) แยกวิเคราะห์ไฟล์. json จากคำถาม (อันที่จริงฉันยืมตัวอย่างข้อมูลการทำงานจากคำตอบ upvote ที่สุด) และเลือกข้อมูลที่ยกมาบวก 2) สร้างตัวแปรเชลล์จากภายใน awk กำหนดเชลล์ชื่อฟรี ชื่อตัวแปร
eval $( curl -s 'https://api.github.com/users/lambda' |
awk ' BEGIN { FS="\""; RS="," };
{
if ($2 == "login") { print "Login=\""$4"\"" }
if ($2 == "name") { print "Name=\""$4"\"" }
if ($2 == "updated_at") { print "Updated=\""$4"\"" }
}' )
echo "$Login, $Name, $Updated"
ไม่มีปัญหากับช่องว่างภายใน ในการใช้งานของฉันคำสั่งเดียวกันจะแยกวิเคราะห์เอาต์พุตบรรทัดยาวเดี่ยว วิธีนี้เหมาะสำหรับข้อมูลที่เชื่อถือได้เท่านั้น มันง่ายต่อการปรับให้เข้ากับการรับข้อมูลที่ไม่มีการอ้างอิง สำหรับตัวแปรจำนวนมากการเพิ่มความเร็วเล็กน้อยสามารถทำได้หากใช้อย่างอื่น เห็นได้ชัดว่าการขาดอาร์เรย์หมายถึง: ไม่มีหลายระเบียนโดยไม่มีการเล่นซอเพิ่มเติม แต่ถ้ามีอาร์เรย์ให้ปรับใช้โซลูชันนี้เป็นงานง่าย
@maikel sed ตอบเกือบทำงาน (แต่ฉันไม่สามารถแสดงความคิดเห็นได้) สำหรับข้อมูลที่จัดรูปแบบของฉัน - มันใช้งานได้ ไม่มากกับตัวอย่างที่ใช้ที่นี่ (คำพูดที่หายไปทิ้งมันออกไป) มันซับซ้อนและยากที่จะแก้ไข นอกจากนี้ฉันไม่ต้องการโทร 11 สายเพื่อแยก 11 ตัวแปร ทำไม? ฉันจับเวลา 100 ลูปเพื่อแยกตัวแปร 9 ตัว: ฟังก์ชั่น sed ใช้เวลา 48.99 วินาทีและโซลูชันของฉันใช้เวลา 0.91 วินาที! ไม่ยุติธรรม? ทำการแยกเพียง 9 ตัวแปร: 0.51 เทียบกับ 0.02 วินาที