sed -r 's/^.*\((.{32})\).*$//' filename
Histórico:
Todos os logs vão para csv para importação de mysql.
Tenha muitos registros com dados como:
Moon,Srv-1,2016-04-04 06:59:48,Entry #103 (s) test (AlphaNum_Need_This_32_Char_Long1),Msg On (ref2357 : Act)
Moon,Srv-2,2016-03-04 06:59:48,Entry #2 SomeLongtest (AlphaNum_Need_This_32_Char_Long2),Msg On (ref2357 : Act)
Problema:
Como extrair:
AlphaNum_Need_This_32_Char_Long1
AlphaNum_Need_This_32_Char_Long2
ou
Descarte a parte Entry #103 (s) test
.
= > O problema, este texto pode variar muito em comprimento e caracteres com alfa, num, ( { } [ ] ( ) / \ . < ># @ _ -
Progresso atual:
sed
e awk
. No Excel, isso resolveria o problema {onde o texto é D4}:
=MID(D4,SEARCH("),",D4)-32,32)
Usado MS Logparser até agora, inverteu a string, procure contar os 32 caracteres etc.
Meta: Não use o logparser do Windows, faça tudo no Linux.
No Perl, você pode contar os caracteres da direita se você usar um índice negativo:
perl -aF, -lne 'print substr $F[3], -33, 32' < input
-n
lê a linha de entrada por linha -a
divide a entrada na matriz @F
-F
especifica o que dividir -l
adiciona novas linhas às impressões Tags text-processing