Поиск последнего элемента в строке с помощью grep

12

Я пытаюсь взять последнее слово или фразу, используя grep для определенного шаблона. В этом примере это будет от последней запятой до конца строки:

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

И поэтому желаемым выводом для этой строки будет «Great Value». Все строки также имеют разную длину, но перед последними словами всегда стоит одна запятая.

По сути, я хотел бы просто выводить с последней запятой до конца строки. Спасибо!

reversebottle
источник
9
Вы рассматривали возможность использования awk -F, '{print $NF}'?
SteelDriver
Получение последнего элемента в строке - простая задача, но как определить эту строку? Я имею в виду, как команда или сценарий могут посмотреть на строку и сказать «да, это один»? что такое шаблон, который идентифицирует эту линию?
Сергей Колодяжный
5
grepэто не инструмент для этой работы.
Кусалананда

Ответы:

27

Вот:

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

  • -o печатает только соответствующую часть

Пример:

% grep -o '[^,]\+$' <<<'Blah,3,33,56,5,Foo 30,,,,,,,3,Great Value'
Great Value
heemayl
источник
Работал как шарм! Я пытался использовать комбинацию "." и другие выражения раньше, но это работает намного лучше, высоко ценится.
обратный бой
хм, я бы использовал -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