
Estoy intentando usar sed para eliminar el resto de una línea después de: HTTP1.1" 200
No puedo entender cómo hacer que sed entienda que quiero que todo eso sea una cadena que coincida, incluidas las comillas dobles y el espacio.
Un ejemplo por si acaso, quiero recurrir a:
"GET /images/loading.gif HTTP/1.1" 200 10819 "https://...
en
"GET /images/loading.gif HTTP/1.1" 200
Respuesta1
Tienes que citar cadenas con espacios cuando usas sed (o la mayoría de las otras herramientas) desde la línea de comandos. Y como ya utilizas las comillas dobles, debes optar por comillas simples:
echo '"GET /images/loading.gif HTTP/1.1" 200 10819 "https://...' | \
sed 's|HTTP/1.1" 200.*|HTTP/1.1" 200|'
da:
"GET /images/loading.gif HTTP/1.1" 200
Respuesta2
Con GNU grep:
| grep -o '.*HTTP/1\.1" 200'
Con GNU sed:
| sed -r 's/(.*HTTP\/1\.1" 200).*/\1/'
Respuesta3
Si simplemente agrega un delimitador de nueva línea después de la cadena coincidente, puede P
imprimir solo una cantidad limitada del espacio del patrón sin tener que modificarlo demasiado. Por lo general, esto puede funcionar incluso cuando el espacio del patrón contiene bytes que no son parte de un carácter.
sed -n 's|HTTP/1.0” 200|&\n|;P' <in >out
nota: de manera portátil, querrás usar un carácter de nueva línea literal en lugar del n
usado anteriormente, aunque funciona como está escrito en GNU.sed