sed для удаления всего после строки?

sed для удаления всего после строки?

Я пытаюсь использовать sed, чтобы удалить остаток строки после: HTTP1.1" 200

Я не могу понять, как заставить sed понять, что мне нужно сопоставить все это как строку, включая двойные кавычки и пробел.

Хочу привести пример для верности:

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

в

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

решение1

Вам нужно заключать строки в кавычки с пробелами, когда вы используете sed (или большинство других инструментов) из командной строки. И поскольку вы уже используете двойные кавычки, вам нужно перейти на одинарные кавычки:

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

дает:

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

решение2

С помощью GNU grep:

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

С помощью GNU sed:

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

решение3

Если вы просто добавите разделитель новой строки после вашей совпавшей строки, вы можете Pпечатать только часть пространства шаблона, не изменяя его слишком сильно. Это обычно может работать даже тогда, когда пространство шаблона содержит байты, которые не являются частями символа.

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

примечание: в переносимом варианте вам придется использовать буквальный символ новой строки вместо использованного nвыше, хотя он работает так, как написано в GNUsed

Связанный контент