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

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 
  • как удалить 0 (ноль) со дня и месяца, но не с года (01/09/2012), используя в Linux (Redhat)
  • Параметр игнорируется при цитировании
  • Как создать сценарий оболочки для установки докеров
  • Удаление файлов старше определенного файла
  • Как вырезать все до определенного слова / после поиска в скрипте
  • Для Loop для Google Image Загрузка скрипта Bash
  • Параметры переменных окружения из файла
  • Получать уведомления от avahi
  • Как завершить скрипт оболочки?
  • Команда работает в командной строке, но не работает в сценарии оболочки
  • Как писать повторяющиеся строки свободной формы в файл, так же быстро, как «dd»?
  • Поиск количества времени в определенном номере в файле, где также указан диапазон
  • Interesting Posts

    Как глобально настроить безопасные клиенты с помощью OpenSSL на Oracle Linux 5 / RHEL 5?

    Обновление VMware Player заполнило половину диска 27,5 ГБ. Мне нужно найти файлы и удалить их

    Отдельное имя хоста сервера, отображаемое в журналах cron этого сервера

    Использует ли какая-либо файловая система Copy for Write Mechanism для CP

    статус выхода команды отличается, когда он запускается через strace

    размер отчетов в отчетах намного больше, чем сумма его содержимого

    Regex & Sed / Perl: совместить слово, которому НЕ предшествует другое слово

    Запись на stdin процесса

    Проблема установки Okular из ppa под Ubuntu

    Невозможно FTP в экземпляр Google Compute Engine с помощью Debian

    Arch Linux Шифрование всего диска

    Объем «boot» имеет только 0-байтовый дисковый объем, оставшийся

    virtualbox-guest- * установлен на хосте; может ли это быть причиной замерзания системы?

    Команда sudo внутри блока heredoc в сеансе ssh не работает

    Подстановочные знаки в способностях

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