Как grep слово после / summary / в переменной и хранить слово в новой переменной в сценарии bash

Я очень новичок в скрипте bash, а также в команде grep. Я предлагаю пользователю ввести путь и сохранить его в переменной с именем path.

$path: /a/b/c_12/d/e/summary/system/mode/output/file.txt 

Структура пути всегда будет одной и той же, именно так, что системные, режимы, выходные имена не исправляются. Поэтому, im планируя grep имя системы, которое расположено после / summary /.

Как я могу grep имя системы, а затем сохранить в переменной, чтобы я мог использовать переменную с помощью сценария bash? Я ожидаю, что имя системы должно быть в новой переменной. (например, $ systemname)

  • удалить строки в файле list_file из другого файла (ов)
  • Bash Script для cp-файлов из списка
  • shell-скрипты удаленных команд через ssh
  • Извлечение URL из неформатированного текста
  • Условная установка файлов и каталогов в пакетах Debian
  • Как назначить переменную внутри трубы
  • Почему мой скрипт не выполняется на if.up
  • «Дополнительные символы после команды» в команде sed a
  • 4 Solutions collect form web for “Как grep слово после / summary / в переменной и хранить слово в новой переменной в сценарии bash”

    Если до «системной» структуры пути одно и то же, вы можете использовать cut для этой задачи.
    -d обозначает делиметр, в вашем случае это '/'. В то время как -f необходимо выбрать разрезанный кусок.

     cs-server@:~/$ systemname=$(echo "/a/b/c_12/d/e/summary/system/mode/output/file.txt" | cut -d'/' -f8) cs-server@:~/$ echo $systemname system cs-server@:~/$ 

    Использовать расширение параметра Shell bash

     $ path='/a/b/c_12/d/e/summary/system/mode/output/file.txt' $ b=${path##/a/b/c_12/d/e/summary/} $ echo $b system/mode/output/file.txt $ echo ${b%%/*} system $ 

    Смотрите также:

    Как выполнять строковые манипуляции в bash?

    Как я могу использовать расширение параметра? Как я могу получить подстроки? Как я могу получить файл без его расширения или получить только расширение файла? Какие хорошие способы сделать basename и dirname?

    Использование поддержки Bash ERE:

     $ echo $FILE /a/b/c_12/d/e/summary/system/mode/output/file.txt $ [[ $FILE =~ (\/[a-zA-Z_0-9]*){7} ]] $ echo ${BASH_REMATCH[1]:1} system 

    Учитывая, что ОП изменил требования к: имя systen может быть где угодно, но всегда после summary

     $ echo $FILE /a/b/c_12/d/e/f/g/summary/system/mode/output/file.txt $ [[ $FILE =~ (*\/summary\/[a-zA-Z_0-9]*){1} ]] $ echo ${BASH_REMATCH[2]:9} system 

    AWK:

     var1=$(echo '/a/b/c_12/d/e/summary/system/mode/output/file.txt' | awk 'BEGIN{FS="/";}{print $8}');echo $var1 
    Interesting Posts
    Linux и Unix - лучшая ОС в мире.