Необходимо извлечь часть строки с помощью оболочки

У меня есть сценарий, как,

#/bin/bash -x LASTBUILD=' 174254491 2018-08-08T11:04:40Z gs://abc/kishor/5.4.0.61/xyz-5.4.0-61.tgz TOTAL: 46 objects, 7325896651 bytes (6.82 GiB)' echo "this is the LASTBUILD ============== $LASTBUILD" LATESTBUILD=echo $LASTBUILD | cut -d ' ' -f 3 echo "this is the LATESTBUILD ############### $LATESTBUILD" 

После выполнения показывает результат, как показано ниже,

 [root@root ~]# echo $LATESTBUILD [root@root ~]# 

Мой ожидаемый результат, как показано ниже,

 [root@root ~]# echo $LATESTBUILD gs://abc/kishor/5.4.0.61/xyz-5.4.0-61.tgz [root@root ~]# 

Приведенный выше код не работает.

PS: также пытался использовать awk, но не работал,

 LATESTBUILD=$LASTBUILD | awk -F '/' '{print $5}' 

4 Solutions collect form web for “Необходимо извлечь часть строки с помощью оболочки”

Есть несколько проблем с вашим скриптом:

  1. Ваш hash-взрыв недействителен. У вас есть #/bin/bash -x и это должно быть #!/bin/bash -x
  2. Ваша переменная LASTBUILD странная. Каждый столбец разделен двойными пробелами, что приведет к странным действиям cut , и вы также не хотите, чтобы в нем была новая строка с cut.
  3. LATESTBUILD=echo $LASTBUILD | cut -d ' ' -f 3 LATESTBUILD=echo $LASTBUILD | cut -d ' ' -f 3 – ничто. Это должно быть в подстановке команд , но даже тогда это не будет работать из-за двойного интервала. Должно быть: LATESTBUILD=$(cut -d ' ' -f5 < <<"$LASTBUILD")
  4. Переменные, установленные внутри вашего скрипта, не будут доступны вне его, поэтому выполнение команды echo $LATESTBIULD в командной строке после выполнения скрипта не будет и не должно работать.

Вот рабочая версия вашего скрипта:

 #!/bin/bash LASTBUILD='174254491 2018-08-08T11:04:40Z gs://abc/kishor/5.4.0.61/xyz-5.4.0-61.tgz TOTAL: 46 objects, 7325896651 bytes (6.82 GiB)' echo "this is the LASTBUILD ============== $LASTBUILD" LATESTBUILD=$(cut -d ' ' -f5 < <<"$LASTBUILD") echo "this is the LATESTBUILD ############### $LATESTBUILD" 
 awk '{ print $3 }' < << $LASTBUILD 

Разделитель полей по умолчанию в awk в пробелах, поэтому выведите 3-е поле с пробелами.

Вы можете сделать это (осторожно) с оболочкой:

 LASTBUILD=' 174254491 2018-08-08T11:04:40Z gs://abc/kishor/5.4.0.61/xyz-5.4.0-61.tgz TOTAL: 46 objects, 7325896651 bytes (6.82 GiB)' set -f # disable filename generation (globbing) set -- $LASTBUILD # specifically un-quoted, to allow splitting LATESTBUILD=$3 

Как насчет

 read _ _ LATESTBUILD _ < << $LASTBUILD 
  • как удалить все файлы, исключая определенные файлы
  • Как сделать так, чтобы скрипт вызывался внутри другого скрипта в команде ssh?
  • это нормально, чтобы запустить работу cron с тем же временем?
  • Как напечатать количество рисунков в каждой строке?
  • Скрипт умирает, когда родительский процесс завершается
  • Несколько команд в sshpass
  • как получить заявленное поведение для команды system () awk?
  • Используя оболочку 'printf', где строка формата находится в переменной и не имеет фиксированного числа заполнителей полей?
  • После сбоя tar скрипт завершает работу без обработки ошибки.
  • Присвоение значения stdout переменной
  • повторить вывод из непрерывного streamа
  • Interesting Posts

    Разница между командами V и S в нормальном режиме?

    tr не имеет эффекта при использовании в $ () и сохраняется в переменной

    Соглашение об использовании версии Linux

    Перечисление \ запись файлов в определенном каталоге вызывает команду

    ошибка device-mapper при настройке dm-cache

    index.html не работает в корневом каталоге apache

    Установка HDF5-1.8.13 на Solaris 11 – не удалось

    генерация кода / proc файловая система

    Элементы управления Spotify (следующий, предыдущий и т. Д.) Через контекстное меню в фаворитах gnome

    Простой сценарий оболочки с арифметической проблемой … ** дает мне проблемы

    Как использовать DD для клонирования раздела с образа диска?

    Как я могу манипулировать файлом таблицы разделов без проверки fdisk его действительности?

    ProxyCommand используется для множественной пересылки и проверки подлинности запроса

    Этот ключ получает значение из таблицы поиска в * nix?

    Как определить, когда процесс или машина привязаны к IO?

    Linux и Unix - лучшая ОС в мире.