Bash получить последнее предложение в строке
Предположим, мы получили следующую переменную, содержащую строку:
text="All of this is one line. But it consists of multiple sentences. Those are separated by dots. I'd like to get this sentence."
Теперь мне нужно последнее предложение "Я хотел бы получить это предложение". Я попытался с помощью sed:
echo "$text" | sed 's/.*\.*\.//'
Я думал, что это будет удалить все до шаблона .*.
, Это не так.
В чем здесь проблема? Я уверен, что это может быть решено довольно быстро, к сожалению, я не нашел никакого решения для этого.
2 ответа
Используя awk, вы можете сделать:
awk -F '\\. *' '{print $(NF-1) "."}' <<< "$text"
I'd like to get this sentence.
Используя sed:
sed -E 's/.*\.([^.]+\.)$/\1/' <<< "$text"
I'd like to get this sentence.
Не забудьте встроенный
echo "${text##*. }"
Это требует пробела после полной остановки, но шаблон легко адаптировать, если вы этого не хотите.
Что касается вашей неудачной попытки, регулярное выражение выглядит хорошо, но странно. Шаблон \.*\.
ищет ноль или более буквальных периодов, за которыми следует буквальный период, т.е. фактически один или несколько символов периода.