Adicionar -z
às suas opções grep fará com que o grep trate as novas linhas como caracteres de terminação nula (
), ao contrário de linhas separadas, mas elas não parecem ser passíveis de serem encontradas na regex. A solução para isso é simplesmente combinar tudo ( .*
-o
) até o final do padrão desejado (no seu caso "created_at").
Em seguida, você pode adicionar wc -l
para fazer com que o grep só exiba o que é realmente correspondido, caso contrário, ele exibe o arquivo inteiro (já que agora é essencialmente uma linha gigante). Alternativamente, se a única finalidade de produzir para um arquivo é, posteriormente, -c
, sugiro que você use a opção %code% do grep, que imprimirá o número de correspondências em vez da correspondência em si.
Isso se traduz ao seguinte comando:
grep -wirnEzc '},.*created_at' *
Expandindo isso para incluir seu padrão anterior, também obtemos:
grep -wirnEzc '},.*created_at":\s"Wed Oct 19 2(1:[0-5][0-9]:[0-5][0-9]|2:([0-2][0-9]:[0-5][0-9]|30:00)) .* 2016' *