Tìm mục cuối cùng trong một dòng bằng grep


12

Tôi đang cố gắng sử dụng từ hoặc cụm từ cuối cùng bằng grep cho một mẫu cụ thể. Trong ví dụ này, nó sẽ là dấu phẩy từ cuối đến cuối dòng:

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

Và do đó, đầu ra mong muốn cho dòng đó sẽ là "Giá trị lớn". Tất cả các dòng có độ dài khác nhau là tốt, nhưng luôn luôn có một dấu phẩy trước các từ cuối cùng.

Về cơ bản, tôi muốn chỉ đơn giản là xuất từ ​​dấu phẩy cuối cùng đến cuối dòng. Cảm ơn bạn!


9
Bạn đã cân nhắc sử dụng awk -F, '{print $NF}'chưa?
Steeldo

Lấy mục cuối cùng trên dòng là nhiệm vụ dễ dàng, nhưng làm thế nào để xác định dòng đó? ý tôi là, làm thế nào một lệnh hoặc tập lệnh có thể nhìn vào dòng và nói "vâng, đó là một"? mô hình xác định dòng đó là gì?
Sergiy Kolodyazhnyy

5
grepkhông phải là công cụ cho công việc này.
Kusalananda

Câu trả lời:


27

Đây:

grep -o '[^,]\+$'
  • [^,]\+khớp với một hoặc nhiều ký tự không ,nằm ở cuối dòng ( $)

  • -o chỉ in phần phù hợp

Thí dụ:

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

Làm việc như người ở! Tôi đã cố gắng sử dụng kết hợp "." và các biểu hiện khác trước đây nhưng điều này hoạt động tốt hơn rất nhiều, được đánh giá cao.
đảo ngược

hmm, tôi đã sử dụng -Eovà sau đó không cần thiết để thoát khỏi+
Baldrickk

@Baldrickk -Echo phép ERE, đó là lý do tại sao.
heemayl

@heemayl vâng, tôi biết tại sao. Tôi có xu hướng sử dụng nó vì nó là một cú pháp regex phổ biến hơn
Baldrickk

14

Luôn luôn muốn xem một awkgiải pháp vì vậy đây là (nâng cao giải pháp thích hợp!):

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

3
Đây phải là câu trả lời chính xác. Trong khi bạn có thể sử dụng grep, bạn cũng có thể lái vít bằng búa.
wilsotc
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.