Estou escrevendo um método para filtrar arquivos (estilo grep), pra ser usado numa app web. Tentei uma versão em java, mas era lenta demais (alguns arquivos têm mais de 2gb, levava mais de 10 minutos para terminar). Assim, passei a usar ferramentas nativas (findstr no Windows e awk no Linux - o awk acabou deixando mais fácil a conversão da expressão regular feita em Java).
Pra rodar, uso o Runtime.exec(String[] parametros), passando como parâmetros o awk, a expressão e o(s) arquivo(s).
awk '/761CB70A59A5F4A38555977272B821746C5759DC/' arquivo.log
O problema começa quando tento executar a chamada no linux: o awk reclama de [quote]unexpected character ‘’’[/quote].
Quando eu removo o apóstrofo o comando executa sem erros, mas ele é necessário em outro método, um pouco mais complexo:
awk '/(^....-..-.. ..:..:..,...[ ]+(INFO|DEBUG))/; !/(^....-..-.. ..:..:..,...[ ]+)/' arquivo.log
Essa expressão procura por linhas de log de um certo nível, começando com "2009-11-16 14:29:01,168 " (nesse caso, como estou trabalhando com linhas, seleciono também as linhas que NÃO correspondem à expressão anterior para incluir stacktraces e outros logs multilinha).
A chamada apenas dá erro quando executada pelo runtime.exec(). Se eu copiar e colar a exata linha gerada no console, funciona sem problemas. Alguém sabe de alguma solução para isso?
valeu o/