我想将包含HTTP响应的文件拆分为两个文件:一个只包含HTTP头,另一个包含消息正文。为此,我需要使用 shell脚本在第一个空行(或第一行上仅包含CR ='\r'字符的UNIX工具)中将文件拆分为两个。

如何以便携方式执行此操作(例如使用 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 '/^$/'

(假设<!>“filename <!>”的内容与echo的输出相同)将在这种情况下创建两个名为<!> quot; xx00 <!> quot;的文件。和<!>“; xx01 <!>”;前缀可以从<!>“xx <!>”更改; to <!> quot; outfile <!> quot ;,例如,带-f outfile,文件名中的位数可以用-n 3更改为3。如果需要处理Macintosh行结尾,可以使用更复杂的正则表达式。

要在每个空行拆分文件,您可以使用:

csplit -s filename '/^$/' '{*}'

模式'{*}'会使前面的模式重复多次。

给出awk脚本

BEGIN { fout="headers" }
/^$/ { fout="body" }
{ print $0 > fout }

awk -f foo.awk < httpfile将为您写出两个headersbody文件。

您可以使用以下命令提取文件的第一部分(HTTP标头)

awk '{if($0=="")exit;print}' myFile

和第二部分(HTTP正文):

awk '{if(body)print;if($0=="")body=1}' myFile
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top