Grep em linha única [duplicado]

7

Eu tenho um script que transmite um padrão em uma única linha (sem quebras de linha). Eu quero grep stock_ticker nessa linha e imprimo assim que eu encontrar um. Agora o script nunca termina e é essencialmente loop indefinidamente.

Uma alternativa que pensei em como eu poderia trabalhar nisso seria dividir o fluxo de entrada em linhas e canalizá-lo para o grep. Entendemos que você pode grep de uma saída. No entanto, segundo minha compreensão, descubro tudo de grep , sed , awk linha a linha.

De qualquer forma, posso mudar esse comportamento e trabalhar nisso?

./a.out | grep 'stock_ticker'

atualmente gera Memory exhausted . Isso ocorre porque o grep lê linha por linha antes de cuspir a saída. Eu gostaria de mudar esse comportamento. Alguma idéia de como?

    
por Phani 28.07.2015 / 19:37

1 resposta

8

Sem quebras de linha, o grep está armazenando em buffer toda a entrada, para que possa mostrar a "linha" onde a string aparece.

Duas perguntas:

  • Você precisa do conteúdo adjacente?
  • existem espaços ou outros caracteres que separam os tokens?

Se você não precisa do contexto do conteúdo adjacente e há espaços que separam os tokens, apenas use tr para transformar espaços em feeds de linha:

./a.out | tr ' ' '\n' | grep 'stock_ticker'

Se você quiser o conteúdo adjacente, basta adicionar uma das opções -C -A ou -B ao comando grep. Isso permite que o grep mostre as "linhas" antes e / ou depois do ticker no padrão de pesquisa.

    
por 28.07.2015 / 19:59

Tags