LINUX.ORG.RU

Вопрос по регулярке

 


0

1

Как код вида

echo abc4-def-1a23-456|grep -Po '.*(?=-\d)'
переделать, чтобы выводило до первого повторения -\d, а не до последнего?
Т.е. получить abc4-def, а не abc-def-1a23

★★★★★

Последнее исправление: teod0r (всего исправлений: 1)

Если топорно, то использовать нежадный проход:

echo abc4-def-123-456|grep -Po '^.*?(?=-\d)'

^ - символ начала строки. С его помощью отсекаем второе соответствие «123».

Deleted
()
Ответ на: комментарий от Deleted

о благодарю. про ^ не догадался

teod0r ★★★★★
() автор топика
Ответ на: комментарий от Deleted

не могу понять почему оно работает.
почему ^ работает в комбинации с нежадным. никак не пойму

teod0r ★★★★★
() автор топика
Ответ на: комментарий от teod0r

Нежадный ищет до первого соответствия следующих после него символов в регулярке. А искать он будет как раз от знака предстоящего ^ - якорь и будет отправной точкой для старта поиска, первый символ ж :)

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.