วิธีที่ง่ายที่สุดในเชลล์เป้าหมายเพื่อแยกสตริงออกจากบรรทัดข้อความหรือไม่


1

สมมติว่าฉันกำลังทำอยู่grepและมันคืนบรรทัดนี้:

Invalid value (48) on line 3

ฉันจะดึงค่านั้น48ลงในตัวแปรในเชลล์เป้าหมายได้อย่างง่ายดายได้อย่างไร?


ด้วยคำสั่ง "Bourne Shell" บริสุทธิ์หรือคุณสามารถใช้เครื่องมือภายนอกได้หรือไม่? ไม่มีทุบตีหรืออะไรล่าสุด?
slhck

คำตอบ:


1

หากคุณแน่ใจว่ารูปแบบนั้นเสมอเพื่อให้ได้ค่าในวงเล็บคู่แรกการตัดคือเพื่อนที่ดีที่สุดของคุณ

myvar=$(echo 'Invalid value (48) on line 3' | cut -d\( -f2 | cut -d\) -f1)

สิ่งนี้จะดึงค่าระหว่าง parens


$()ไม่ได้เป็นส่วนหนึ่งของ SVID และไม่ใช่ "Bourne Shell" เท่านั้น มันกำหนดไว้ใน POSIX ว่า
slhck

ใช่ถ้ามันเป็นของแท้ดั้งเดิม แต่ในลินุกซ์ส่วนใหญ่ / bin / sh เป็นเพียง symlink ไปที่ / bin / bash อย่างไรก็ตาม backstick ควรทำงานถ้า $ () ไม่ เพียงแค่ลบ $ และแทนที่ () ด้วย ``
johnshen64

ใช่เพิ่งจะพูดถึงมันเพื่อความสมบูรณ์เนื่องจาก OP ดูเหมือนจะเฉพาะเจาะจงมากเกี่ยวกับshไม่ใช่ Bash และสหาย
slhck

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