我想文件方含HTTP响应分成两个文件:一个仅含有HTTP标头,和一个方含一个消息的主体中。 为此,我需要在第一空行一个文件分割成两个(或用于在第一行UNIX工具仅包含CR =“ \r
使用shell脚本 ”字符)。
如何做到这一点的可移植的方法(例如,使用SED,但没有GNU扩展)? 我们可以假设,空行不会在一个文件中的第一行。 空行可以拿到要么,没有或两个文件的; 没关系我。
我想文件方含HTTP响应分成两个文件:一个仅含有HTTP标头,和一个方含一个消息的主体中。 为此,我需要在第一空行一个文件分割成两个(或用于在第一行UNIX工具仅包含CR =“ \r
使用shell脚本 ”字符)。
如何做到这一点的可移植的方法(例如,使用SED,但没有GNU扩展)? 我们可以假设,空行不会在一个文件中的第一行。 空行可以拿到要么,没有或两个文件的; 没关系我。
$ cat test.txt
a
b
c
d
e
f
$ sed '/^$/q' test.txt
a
b
c
$ sed '1,/^$/d' test.txt
d
e
f
更改/^$/
到/^\s*$/
如果你希望有可能是空白的空行。
您可以使用csplit
:
echo "a
b
c
d
e
f" | csplit -s - '/^$/'
要么
csplit -s filename '/^$/'
(假设的“文件名”的内容是一样的回声的输出)会产生,在这种情况下,两个文件名为“XX00”和“XX01”。 前缀可以从“XX”到“OUTFILE”被改变,例如,用-f outfile
和的文件名中的数字的数量可以被改变至3 -n 3
。 如果你需要处理的Macintosh线结局。你可以使用更复杂的正则表达式。
要拆分在每个空行的文件时,您可以使用:
csplit -s filename '/^$/' '{*}'
图案'{*}'
导致要重复多次尽可能前述图案。
鉴于awk脚本
BEGIN { fout="headers" }
/^$/ { fout="body" }
{ print $0 > fout }
awk -f foo.awk < httpfile
将写出两个文件headers
和body
给你的。
您可以提取您的文件(HTTP头)与第一部分:
awk '{if($0=="")exit;print}' myFile
和第二部分(HTTP体)配有:
awk '{if(body)print;if($0=="")body=1}' myFile