У меня есть разделенная строка пространства, которая производится командой, к которой мне нравится передавать по каналу cut
, использование -fd ' '
разделять на пробелах. Я знаю, что могу использовать -f <n>
отобразить полевое число <n>
, но я могу заставить его отобразить последнее поле, если я не знаю длину строки?
Или сделайте я должен использовать более гибкий инструмент редактирования текста как sed
или awk
?
Никакой cut
не может сделать этого. Вы могли использовать два rev
команды, как
echo 'foo bar baz' | rev | cut -d' ' -f1 | rev
, но обычно легче использовать awk
:
echo 'foo bar baz' | awk '{print $(NF)}'
Можно сделать, этот использующий только окружает, никакой внешний инструмент не необходим, с помощью Расширения Параметра:
${var##* }
var##*
отбросит все от запуска для длительности пространства от параметра (переменная) var
.
, Если разделитель может быть каким-либо пробелом, например, пространством или вкладкой, используйте класс символов [:blank:]
:
${var##*[[:blank:]]}
Пример:
$ var='foo bar spam egg'
$ echo "${var##* }"
egg
$ var=foo\tbar\tspam\tegg'
$ echo "$var"
foo bar spam egg
$ echo "${var##*[[:blank:]]}"
egg
Мне лично нравится ответ Florian Diesch. Но слишком существует это.
a=$(echo "your string here" | wc -w)
echo "your string here" | cut -d' ' -f$a
Объяснение:
wc -w
дает количество слов. и cut
сокращения последний Word
РЕДАКТИРОВАНИЕ:
я изобразил другой способ Сделать его:
echo "Any random string here" | tac -s' ' | head -1
Вот одно использование grep
$ echo "Change is Good" | grep -o '[^ ]* , Как оно работает:
- grep с
-o
Печать только подобранные (непустые) части согласующего отрезка длинной линии. - regexp
[^ ]*$
соответствует чему-либо от конца, пока он не нашел пространство.
<час> Другой лайнер от glenn jackman с помощью жемчуга
$ echo "Change is Good" | perl -lane 'print $F[-1]'
Good
Good
-o
Печать только подобранные (непустые) части согласующего отрезка длинной линии. [^ ]*$
соответствует чему-либо от конца, пока он не нашел пространство. Другой лайнер от glenn jackman с помощью жемчуга
$ echo "Change is Good" | perl -lane 'print $F[-1]'
Good