การค้นหารายการสุดท้ายในบรรทัดโดยใช้ grep


13

ฉันพยายามที่จะใช้คำหรือวลีสุดท้ายโดยใช้ grep สำหรับรูปแบบเฉพาะ ในตัวอย่างนี้มันจะเป็นจากเครื่องหมายจุลภาคสุดท้ายถึงท้ายบรรทัด:

Blah,3,33,56,5,Foo 30,,,,,,,3,Great Value

และผลลัพธ์ที่ต้องการสำหรับบรรทัดนั้นก็คือ "คุ้มค่ามาก" ทุกบรรทัดมีความยาวต่างกันเช่นกัน แต่ต้องมีเครื่องหมายจุลภาคหนึ่งคำก่อนหน้าเสมอ

โดยทั่วไปฉันต้องการเพียงแค่ส่งออกจากเครื่องหมายจุลภาคล่าสุดไปยังจุดสิ้นสุดของบรรทัด ขอบคุณ!


9
คุณเคยคิดจะใช้awk -F, '{print $NF}'ไหม?
ขับขี่เหล็ก

การรับไอเท็มสุดท้ายบนบรรทัดนั้นเป็นเรื่องง่าย แต่จะต้องระบุบรรทัดนั้นอย่างไร ฉันหมายความว่าคำสั่งหรือสคริปต์สามารถดูบรรทัดได้อย่างไรและพูดว่า "อ๋อนั่นคือคำนั้น" รูปแบบที่ระบุบรรทัดนั้นคืออะไร
Sergiy Kolodyazhnyy

5
grepไม่ใช่เครื่องมือสำหรับงานนี้
Kusalananda

คำตอบ:


27

ที่นี่:

grep -o '[^,]\+$'
  • [^,]\+ตรงกับตัวละครอย่างน้อยหนึ่งตัวที่ไม่,อยู่ท้ายบรรทัด ( $)

  • -o พิมพ์เฉพาะส่วนที่ตรงกัน

ตัวอย่าง:

% grep -o '[^,]\+$' <<<'Blah,3,33,56,5,Foo 30,,,,,,,3,Great Value'
Great Value

ทำงานเหมือนจับใจ! ฉันกำลังพยายามใช้การรวมกันของ "." และการแสดงออกอื่น ๆ ก่อนหน้านี้ แต่ทำงานได้ดีขึ้นมากชื่นชมมาก
reversebottle

อืมฉันเคยใช้-Eoแล้วไม่จำเป็นต้องหลบหนี+
Baldrickk

@Baldrickk -Eทำให้ ERE นั้นเป็นเหตุผล
heemayl

@ heemayl ใช่ฉันรู้ว่าทำไม ฉันมักจะใช้มันเป็นไวยากรณ์ทั่วไปมากกว่าปกติ
Baldrickk

15

มักจะชอบที่จะเห็นawkทางออกดังนั้นนี่คือ (แก้ปัญหาที่เหมาะสม!):

% awk -F, '{print $NF}'  <<<'Blah,3,33,56,5,Foo 30,,,,,,,3,Great Value'
Great Value

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