извлечение строки bash

Я хотел бы извлечь второе поле из последней части следующих строк:

foo_1.103.debug_xx.ver21-inc-1 --> string extracted "debug_xx" foo_1.103.1.0.release_32_xx.ver21-inc-1 --> string extracted "release_32_xx" foo_1.103.1.0.release_xx.ver21-inc-1 --> string extracted "release_xx" 

Любая помощь будет оценена.

  • Cygwin - Shell Scripting (eval и echo)
  • В чем разница между запуском «bash script.sh» и «./script.sh»?
  • Возможно одновременное использование скобок (перестановки) и расширения массива?
  • Пакетное преобразование файлов модулей с помощью XMP
  • Отправить копию вывода скрипта в файл
  • Как создать службу для сценария оболочки, чтобы я мог начать и остановить ее, как демон?
  • Измените файл SVG на основе информации в файле CSV
  • хотите su без пароля внутри сценария оболочки
  • 4 Solutions collect form web for “извлечение строки bash”

    Используйте ${VAR%PATTERN} чтобы удалить суффикс, соответствующий последнему полю, а затем ${NEWVAR##PATTERN} чтобы удалить префикс, соответствующий всем, кроме последнего оставшегося поля.

     all_but_last_field=${mystring%.*} second_to_last_field=${all_but_last_field##*.} 

    Вам нужно сохранить строку в переменной и сохранить промежуточный результат в переменной также, вы не можете напрямую связывать расширения (вы можете в zsh, но не в bash).

    С чистым bash :

     IFS='.' read -ap <<< 'foo_1.103.1.0.release_32_xx.ver21-inc-1' echo "${p[${#p[@]}-2]}" 

    Вы можете сделать это проще с awk :

     awk -F. '{print$(NF-1)}' <<< 'foo_1.103.1.0.release_32_xx.ver21-inc-1' 

    Если ваши строки для разбора являются именами файлов, вы все равно можете сделать это с помощью awk :

     awk -F. 'BEGIN{for(i=1;i<ARGC;i++){$0=ARGV[i];print$(NF-1)}}' foo* 

    Команда sed для этого:

     sed 's/foo_[0-9.]*\([^.]*\).*/\1/' inputfile 

    Предполагая, конечно, что inputfile содержит ваши строки, каждый на своей собственной строке (как кажется вашим примером). Если вы говорите, что используете имена файлов, тогда будет работать и вывод результатов ls в sed .

    предполагая, что это файлы:

    ls foo * | awk -F. '{print $ 3}'

    Interesting Posts

    Apache (httpd) не запускается при загрузке – CentOS 7

    bash -c и неинтерактивная оболочка

    Не удалось закрыть раздел Luks

    git –diff как команда для локальных локальных сетей Linux

    Продолжение прерывания сессии wget?

    Использует ли aptitude безопасное обновление или полное обновление в визуальном режиме?

    Как сопоставить emacs multi-modifier ключи в vim?

    Как установить gcc на NetBSD 6.1.2?

    Есть ли таблица Syscall так же, как таблица прерываний?

    Manjaro загружается на белый экран после удаления ttf-google-fonts-git

    Назовите процесс, используя большинство процессоров без начальных или конечных пробелов

    Могу ли я сделать совместный обмен компьютерами совместимыми с защитой tinfoil-hat (администраторы паролей, электронная почта и т. Д.)

    Как автоматически заставить диски fsck после сбоя в `systemd`?

    Передача внешнего параметра в .exe на Windows с использованием winexe из Linux

    Какой формат в офисной либерре писатель выбрать, чтобы опустить проблемы при открытии слова на окнах?

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