pt sed para remover tudo depois de uma string?

1

Estou tentando usar o sed para remover o restante de uma linha depois: HTTP1.1" 200

Eu não consigo descobrir como conseguir sed para entender que eu quero aquela coisa toda como uma string para combinar, incluindo as aspas duplas e o espaço.

Um exemplo para uma boa medida, quero virar:

"GET /images/loading.gif HTTP/1.1" 200 10819 "https://...

em

"GET /images/loading.gif HTTP/1.1" 200
    
por erds 12.02.2016 / 20:27

3 respostas

5

Você tem que citar strings com espaços quando você usa sed (ou a maioria das outras ferramentas) a partir da linha de comando. E como você já usa as aspas duplas, você precisa escolher aspas simples:

echo '"GET /images/loading.gif HTTP/1.1" 200 10819 "https://...' | \
     sed 's|HTTP/1.1" 200.*|HTTP/1.1" 200|'

dá:

"GET /images/loading.gif HTTP/1.1" 200
    
por 12.02.2016 / 20:31
1

Com o GNU grep:

| grep -o '.*HTTP/1\.1" 200'

Com o GNU sed:

| sed -r 's/(.*HTTP\/1\.1" 200).*//'
    
por 12.02.2016 / 20:48
1

Se você acabou de anexar um delimitador de nova linha após sua string correspondente, você pode P rint usar apenas muito espaço padrão sem ter que modificá-lo em demasia. Geralmente, isso pode até funcionar quando o espaço de padrão contém bytes que não são partes de um caractere.

sed -n 's|HTTP/1.0” 200|&\n|;P' <in >out

nota: portavelmente você vai querer usar um caractere literal de nova linha no lugar do n usado acima, embora funcione como escrito em um GNU sed

    
por 13.02.2016 / 09:32

Tags