Script de bash Emita texto de análise de acordo com os caracteres de espaço em branco

1

Eu tenho uma lista de comandos para analisar por uma auditoria, semelhante a esta:

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

Estou tentando definir cada name=Value para variáveis. Como este é um padrão padrão, eu usei ler com sucesso, no entanto, quando chego a uma linha com espaço em branco (consulte a linha 3), ele compensa todas as minhas variáveis. Não tenho certeza de como lidar com isso sem passar por cada palavra da linha e corresponder a padrões específicos. Esperando que alguém tivesse uma solução melhor lá fora.

    
por Justin Davis 26.05.2018 / 07:03

1 resposta

0

Em bash e usando uma variável de matriz, você pode fazer algo como:

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

imprima os elementos da matriz (o índice da matriz no bash começa em 0):

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

Ou para imprimir apenas um único elemento:

printf '%s\n' "${array[6]}"
name=Policy Name

Leitura futura:

por 26.05.2018 / 07:29