Там какой-либо путь состоит в том, чтобы заставить команду сокращения считать последнее поле только?

У меня есть разделенная строка пространства, которая производится командой, к которой мне нравится передавать по каналу cut, использование -fd ' ' разделять на пробелах. Я знаю, что могу использовать -f <n> отобразить полевое число <n>, но я могу заставить его отобразить последнее поле, если я не знаю длину строки?

Или сделайте я должен использовать более гибкий инструмент редактирования текста как sed или awk?

8
задан 30 September 2016 в 05:21

4 ответа

Никакой cut не может сделать этого. Вы могли использовать два rev команды, как

echo 'foo bar baz' | rev | cut -d' ' -f1 | rev

, но обычно легче использовать awk:

echo 'foo bar baz' | awk '{print $(NF)}'
11
ответ дан 23 November 2019 в 05:22

Можно сделать, этот использующий только окружает, никакой внешний инструмент не необходим, с помощью Расширения Параметра:

${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
5
ответ дан 23 November 2019 в 05:22

Мне лично нравится ответ 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
4
ответ дан 23 November 2019 в 05:22

Вот одно использование grep

$ echo "Change is Good" | grep -o '[^ ]* 

, Как оно работает:

  • grep с -o Печать только подобранные (непустые) части согласующего отрезка длинной линии.
  • regexp [^ ]*$ соответствует чему-либо от конца, пока он не нашел пространство.
<час>

Другой лайнер от glenn jackman с помощью жемчуга

$ echo "Change is Good" | perl -lane 'print $F[-1]'
Good
Good

, Как оно работает:

  • grep с -o Печать только подобранные (непустые) части согласующего отрезка длинной линии.
  • regexp [^ ]*$ соответствует чему-либо от конца, пока он не нашел пространство.
<час>

Другой лайнер от glenn jackman с помощью жемчуга

$ echo "Change is Good" | perl -lane 'print $F[-1]'
Good
2
ответ дан 23 November 2019 в 05:22

Другие вопросы по тегам:

Похожие вопросы: