
我嘗試使用 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