Verificação do valor da 4ª linha após a ocorrência do padrão

1

Eu tenho um arquivo de texto que preciso verificar e estou tentando descobrir como verificar se existe um valor esperado.

Um exemplo do meu arquivo é

InitialPattern:
   Value1=somevalue
   Value2=somevalue
   Value3=somevalue
   InstallationName=InstallationX

Eu não me importo com as linhas 2-4, mas preciso verificar que na linha 5

   InstallationName=Installation1

Para ativar uma chave, esta linha nem sempre existe, e nesse ponto o padrão começa novamente com

InitialPattern:

O que eu tenho até agora funciona, mas não no caso de a linha não ocorrer completamente:

      instName="Installation1"
      installationNames=$(cat file.txt | grep InstallationName)
      IFS=$'\n' read -rd '' -a array <<< "$installationNames"
      for element in "${array[@]}"
      do
         if [[ "$element" =~ "$instName" ]]; then
           test="pass"
         else
           test="fail"
           break
         fi
      done

alguma ideia? Eu estava olhando para este post: Print Matching line e enésima linha da linha correspondente Onde o usuário obteve a quarta linha após uma ocorrência de padrão - eu estava pensando que se eu pudesse armazenar esse valor eu poderia compará-lo com o valor esperado, mas não tenho certeza de como armazená-lo ainda.

Qualquer orientação é bem vinda!

    
por Guenevere 28.10.2015 / 21:48

2 respostas

1

test=$(
    sed '
        /InitialPattern:/! d
        n
        n
        n
        $!n
        /.*Installation[0-9]\+$/d
        s/.*/FAIL/p
        q
        ' file.txt)
test=${test:-PASS}
    
por 28.10.2015 / 22:02
1
sed -e'/\n/D;t'       -e:N  \
    -e'/^InitialPattern/ N' \
    -e'/\nInitialPattern/D' \
    -e's/\n/&/4;tD'         \
    -e'$!s//&/; tN'   -e:D  \
    -e's/ *\(\(Installation\)Name=[X0-9]\{1,\}\) *$//;D'

Não sei bem o que você quer fazer com isso, mas isso só imprime a última linha em uma sequência que corresponda às suas especificações.

Aqui. Eu escrevi um que conta. Assim, você pode apenas alterar o 4 para o que quiser se precisar - o número que você digita é quantas novas linhas devem ficar entre a correspondência InitialPattern mais recente e a Installation correspondência de linha para conseguir imprimir.

    
por 28.10.2015 / 21:57