2010-04-10 3 views
2

Мне нужно напечатать последние 20 символов строки, но только целые слова. Разделитель - это пробел «». Давайте рассмотрим следующий пример:Linux хвост всего целых слов

строку = «Быстрая коричневая лиса прыгает через ленивую собаку»
эхо $ струнной | Хвост С20

возвращается s over the lazy dog. И мне нужно, чтобы он вернул over the lazy dog. Вы знаете, как это сделать? Благодаря!

ответ

3
echo $string | perl -ne 'print "$1\n" if /\b(\S.{0,20})$/' 
+0

Очень приятно, спасибо. – Gargauth

+2

Использование grep: echo $ string | egrep -o '\ <. {0,20} $' –

+0

@UdiM: Вы должны сделать ответ. –

2
echo $string | rev | cut -d ' ' -f -20 
+0

Это выводит * первые * двадцать * слова *. –

+0

lol ... хорошо заметили, изменили его с помощью rev, но он все равно не будет работать над несколькими линиями ... будет исследовать ... – Stefan

1

Это работает в Bash> 3.2 без использования каких-либо внешних программ:

[[ $string =~ \ (.{0,20})$ ]] 
result="$BASH_REMATCH[1]" 

Я использовалgrep версию UdiM в качестве основы.