Как получить последний символ в регулярном выражении с помощью grep - PullRequest
5 голосов
/ 16 февраля 2011

Я пытаюсь получить последний пробел и то, что следует за ним в строке, используя grep.

Это захватывает меня первый пробел:

echo "toto tata titi" | grep -o " .*$"

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

echo "toto tata titi" | grep -o " .*?$"

Он ничего не возвращает

Ожидаемый результат titi.

Ответы [ 3 ]

6 голосов
/ 16 февраля 2011

Замените . на [^ ], что соответствует всему, кроме пробела.Тогда он может быть жадным.

echo "toto tata titi" | grep -o " [^ ]*$"

(Если вы хотите, чтобы grep использовал расширенные регулярные выражения, используйте egrep или grep -E.)

1 голос
/ 16 февраля 2011

По сути, вы просто получаете первый символ последнего поля.Более доступный метод, чем регулярное выражение, - это использование инструмента, который может разбивать строки на поля и выполнение «подстрок».

$ echo "toto tata titi" | awk '{print substr($NF,0,1)}'
t


$ echo "toto tata titi" | ruby -ane 'puts $F[-1][0]'
t
1 голос
/ 16 февраля 2011

РЕДАКТИРОВАТЬ: Я только что видел лучший ответ на этот пост, но в любом случае опубликовать его, так как это может быть полезно, если вы хотите сделать что-то более сложное, например, подмену вещей.

Другой способ сделать это - использовать команду sed и позволить ей заменить (с помощью команды s первой в регулярном выражении) все, кроме того, что вы хотите (который собирается в переменную \1 с помощью круглые скобки:

echo "toto tata titi" | sed -r "s/.*( .*?)$/\1/"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...