извлечение строки 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" 

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

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}'

  • Расширение имени файла для сценария ожидания в bash
  • Как подсчитать вхождения каждого слова, принадлежащего файлу, во все количество файлов `n`, переданных в качестве аргументов?
  • как совместить слова и игнорировать пробелы
  • Как настроить mutt для отображения заголовка даты в моем локальном часовом поясе в пейджере?
  • Разбор допустимого вывода в скрипте оболочки с помощью sed / grep
  • Как выполнить команду watch на выражение с помощью труб?
  • Как я могу выполнить вывод tar через mv?
  • Как скрипт знает путь к файлу .desktop, который запустил его?
  • Вывод нескольких строк из нескольких файлов
  • sed regex для группы захвата между разделителями
  • Замените новые строки char (^ M) во всех файлах, а затем переименуйте файл на основе строки char
  • Как запустить скрипт с другого пути и узнать путь к скрипту?
  • Linux и Unix - лучшая ОС в мире.