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注意:儘管它確實像 GNU 中編寫的那樣工作,但您可能會想要使用文字換行符來代替上面使用的換行符sed

相關內容