shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] escrever até encontrar determinada string


From: Felipe Kellermann
Subject: Re: [shell-script] escrever até encontrar determinada string
Date: Wed, 14 Jan 2004 12:20:16 -0200 (BRST)

On Wed, 14 Jan 2004 5:48am  -0800, moysespr wrote:

> Ainda não achei a solução para a seguinte questão:

        Ae Moyses,


> Em um script tenho um socket recebendo dados de um determinado servidor e ao
> encontrar uma string específica é necessário encerrar a coleta e retornar o
> controle para o script. Em termos de problema é como ter um arquivo no disco e
> dar um "cat arquivo", onde a saída seria truncada na tal string.

        Que neste caso poderia ser usado o `split', mas mesmo assim IIRC
não há nenhuma forma de especificar quantas são as partes ('contextos')
que tu quer pegar. Vou ver melhor isto, depois.


> A string specifica no momento é ponto sózinho em uma linha, só que as linhas
> não são terminadas apenas com hexa 0a (como no unix) mas com 0d0a (como no
> DOS). A seqüência de bytes de encerramento é então 0d 0a 2e 0d 0a.

        Acho que é mais fácil imaginar a linha apenas como '2e 0d 0a'.


> Em outras situações posso precisar fazer encerramento após receber "n" bytes.
> Isso eu consegui com o "dd", mas não sei se é a solução mais indicada.

        Na minha opinião, sim.
        Uma outra alternativa poderia ser o 'split' ou o 'head', também.


> Poderiam apresentar as diversas opções possíveis?

        Tu tá usando os devices especiais, não é? Bom, mas mesmo se não
for, depois de estar com algum `device' já especificado para pegar os
dados, uma das alternativas poderia ser:

        sed '/^.\r$/q' <&p && retorna e fecha o device p

        Se for preciso ficar sem o ponto, só modificar um pouco o sed ou
tirar depois ele. Poderia da mesma forma fazer na própria shell, lendo até
que encontrasse o padrão e depois 'p<&-'. Ou também poderia ser feito com
awk ou qualquer coisa, :-)

-- 
Felipe Kellermann


reply via email to

[Prev in Thread] Current Thread [Next in Thread]