
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á P
imprimir 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 n
usado acima, embora funcione conforme escrito em um GNUsed