sed para remover tudo depois de uma string?

sed para remover tudo depois de uma string?

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

Não consigo descobrir como fazer com que o sed entenda que quero que tudo isso corresponda a uma string, incluindo as aspas duplas e o espaço.

Um exemplo de boa medida, quero citar:

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

em

"GET /images/loading.gif HTTP/1.1" 200

Responder1

Você deve citar strings com espaços ao usar o sed (ou a maioria das outras ferramentas) na linha de comando. E como você já usa aspas duplas, você deve optar pelas 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

Responder2

Com grep GNU:

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

Com GNU sed:

| sed -r 's/(.*HTTP\/1\.1" 200).*/\1/'

Responder3

Se você apenas anexar um delimitador de nova linha após a string correspondente, poderá Pimprimir apenas uma determinada quantidade de espaço do padrão sem precisar modificá-lo demais. Geralmente, isso pode funcionar até mesmo quando o espaço do 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: portável, você desejará usar um caractere de nova linha literal no lugar do nusado acima, embora funcione conforme escrito em um GNUsed

informação relacionada