test=$(
sed '
/InitialPattern:/! d
n
n
n
$!n
/.*Installation[0-9]\+$/d
s/.*/FAIL/p
q
' file.txt)
test=${test:-PASS}
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!
test=$(
sed '
/InitialPattern:/! d
n
n
n
$!n
/.*Installation[0-9]\+$/d
s/.*/FAIL/p
q
' file.txt)
test=${test:-PASS}
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.
Tags shell-script