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

相关内容