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


12

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

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

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

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


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

Работал как шарм! Я пытался использовать комбинацию "." и другие выражения раньше, но это работает намного лучше, высоко ценится.
обратный бой

хм, я бы использовал -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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.