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
-
Definimos
IFSpara "\newline" caractereIFS=$'\n'para que a divisão de palavras acontecerá no caractere "\newline" apenas no resultado de sem aspas - Substituição de Comando$(...). -
A sintaxe
{ list; }é conhecida Comandos de agrupamento e Eu costumava agrupar meus comandos. -
A sintaxe
array=(...)é usada para criar uma matriz associada variável chamadaarray. -
Com
grep -Po 'name=[^-]+(?=\s*-)' infile, imprimimos-only as correspondências que correspondem ao padrão"name="seguido por qualquer tamanho diferente de zero caracteres, mas um hífen[^-]+que segue por zero ou mais espaços em branco até um hífen(?=\s*-).- A sintaxe
(?=...)é positiva-lookahead e com% do grep A opção-Ppode ser usada para interpretar o padrão como uma expressão regular compatível com Perl (PCRE) ) .
- A sintaxe
Leitura futura: