Intereting Posts
Не удалось установить свойства устройства на user-1007.slice: Пользователь user-1007.slice не загружен правильный способ перебора содержимого в каталоге Почему разница в tar czf в Debian 8.5 и 8.7? Скопируйте контент из файлов X и Y, чтобы создать файл XY, но XY-контент – все строчные буквы Потоковая музыка к малине pi Использование nvidia-настроек над ssh Как определить файловую систему размонтированного устройства? Низкий графический режим и выходы Bizarre Terminal RHEL: создание стабильных имен для сетевых интерфейсов Grep из многих ключевых слов по многим файлам: ускорение Чрезвычайно высокая загрузка процессора и отставание от 3D-ускорения в Linux Mint (Virtual Box), но не с программным рендерингом Используя sshpass, код возврата (статус выхода) отличается по неизвестным причинам с использованием допустимых команд Есть ли в Интернете репозиторий утилит Linux через веб-браузер? Команда lsof слишком длинна для определенного идентификатора процесса Linux: проблемы производительности на LUN и многолучевых соединениях

Bash-скрипт Выпуск parsingа текста в соответствии с пробелами

У меня есть список команд для анализа для аудита, похожий на этот:

1. -a *policy name=PolicyName -a *policy workflow name=PolicyWorkflow -a *policy action name=PolicyAction -s Server -b Storage -J Node -y 1 Months -o -F -S 2. -a *policy name=PolicyName -a *policy workflow name=PolicyWorkflow -a *policy action name=PolicyAction -s Server -b Storage -J Node -y 1 Months -o -F -S 3. -a *policy name=Policy Name -a *policy workflow name=PolicyWorkflow -a *policy action name=PolicyAction -s Server -b Storage -J Node -y 1 Months -o -F -S 

Я пытаюсь установить каждое из name=Value для переменных. Поскольку это стандартный шаблон, я успешно использовал read, однако, когда я попадаю в строку с пробелами (см. Строку 3), она смещает все мои переменные. Я не уверен, как справиться с этим, не просматривая каждое слово в строке и не сопоставляя конкретные шаблоны. Надеюсь, у кого-то будет лучшее решение.

    В bash и используя вместо этого переменную-массив, вы можете сделать что-то вроде:

     { IFS=$'\n'; array=($(grep -Po 'name=[^-]+(?=\s*-)' infile)); } 

    затем выводим элементы массива (индекс массива в bash начинается с 0):

     printf '%s\n' "${array[@]}" name=PolicyName name=PolicyWorkflow name=PolicyAction name=PolicyName name=PolicyWorkflow name=PolicyAction name=Policy Name name=PolicyWorkflow name=PolicyAction 

    Или распечатать только один элемент:

     printf '%s\n' "${array[6]}" name=Policy Name 
    • Мы определили IFS для символа ” \n ewline” IFS=$'\n' чтобы разделение слов происходило на символе ” \n ewline” только в результате запроса без кавычек – Подстановка команд $(...) .

    • Синтаксис { list ; } { list ; } Известно группирование команд, и я просто группировал свои команды.

    • Синтаксис array=(...) используется для создания связанной переменной array именем array .

    • В grep -Po 'name=[^-]+(?=\s*-)' infile мы печатаем только совпадения, соответствующие шаблону "name=" за которым следует любая ненулевая длина символов, кроме дефиса [^-]+ который следует за нулем или большим количеством пробелов до дефиса (?=\s*-) .

      • Синтаксис (?=...) выглядит положительно, и с помощью опции -P grep его можно использовать для интерпретации шаблона как Perl-совместимого регулярного выражения (PCRE) .

    Будущее чтение:

    • Как добавить / удалить элемент в / из массива в Bash?
    • Является ли это нормальным подходом для «резервного копирования» переменной $ IFS?