У меня есть список команд для анализа для аудита, похожий на этот:
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) . Будущее чтение: