Пошук останнього елемента в рядку за допомогою grep


13

Я намагаюся взяти останнє слово або фразу, використовуючи grep для певного шаблону. У цьому прикладі це буде від останньої коми до кінця рядка:

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

І тому бажаний вихід для цього рядка був би "Велике значення". Усі рядки також мають різну довжину, але завжди мають одну кому перед останніми словами.

В основному, я хотів би просто вивести з останньої коми до кінця рядка. Дякую!


9
Ви розглядали питання про використання awk -F, '{print $NF}'?
steeldriver

Отримати останній елемент на рядку - це легке завдання, але як його слід визначити? я маю на увазі, як команда чи сценарій можуть дивитись на рядок і сказати "так, це один"? яка закономірність ідентифікує цю лінію?
Сергій Колодяжний

5
grepне є інструментом для цієї роботи.
Kusalananda

Відповіді:


27

Тут:

grep -o '[^,]\+$'
  • [^,]\+відповідає одному або більше символів, які не ,знаходяться в кінці рядка ( $)

  • -o друкує лише відповідну частину

Приклад:

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

Працював як шарм! Я намагався використовувати комбінацію "." та інші вирази раніше, але це працює набагато краще, високо оцінюється.
reverbottle

хм, я б скористався, -Eoі тоді мені не потрібно було бігти+
Балдрік

@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
Це має бути правильна відповідь. Хоча ви можете використовувати греп, ви також можете забити гвинт молотком.
wilsotc
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.