Как 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)

  • Найти и обновить запись cron, используя скрипт
  • Имея аргументы $ line, переданные rsync при использовании опции --protect-args
  • Добавить открытый ключ к авторизованным ключам удаленного сервера и выполнить некоторые команды
  • Как выполнить один и тот же набор команд в нескольких подкаталогах в числовом порядке?
  • Сценарий запускается как «источник» или «исполняемый файл»?
  • Прекратите использование сценария bash, если соединение SSH невозможно сделать невзаимодействующим
  • Каков наилучший инструмент для автоматизации 32-64-битных библиотек для Unix и Windows, создающих программное обеспечение на C ++, воспроизводимое пользователями и машинами?
  • Как распечатать индекс цикла в файл с помощью awk?
  • 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 
    Linux и Unix - лучшая ОС в мире.