Se cada sessão tiver um type
correspondente e for set_to
TRUE
ou FALSE
, você poderá usar sed
e intervalos para isso:
sed '/type=m/,/set_to_/!d;/set_to_TRUE$/!d;s/.*\(sessionid-.*\);.*//' infile
Isso remove todas as linhas que não estão nos intervalos /type=m/,/set_to_/
. Também exclui as linhas nesses intervalos que não terminam em set_to_TRUE
. O sessionid
é então extraído da linha restante (se houver).
Alternativamente,
sed -n '/type=/h;/set_to_TRUE$/{
x;s/.*\(sessionid-.*\);type=m$//p
}' infile
deve imprimir o mesmo.
O último funciona sobrescrevendo o buffer de retenção em cada linha correspondente a type=
Em seguida, em cada linha correspondente a set_to_TRUE
, os buffers são trocados e uma substituição é tentada - a saber, extraia sessionid
de uma linha que termina em type=m
- e, se bem-sucedida, o resultado será p
rinted. Caso contrário, nada acontece porque a impressão automática está desativada por -n
.
O acima assume que não há espaços em branco nas suas linhas.