我尝试使用 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