如何在shell中以可移植的方式在第一个空行上拆分文件(例如使用sed)?

Jak*_*ski 11 shell portability filesplitting sed text-manipulation

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

如何以便携方式(例如使用sed,但没有GNU扩展)这样做?可以假设空行不是文件中的第一行.空行可以得到文件中的任何一个,没有一个或两个; 对我来说没关系.

Pau*_*ce. 15

你可以使用csplit:

echo "a
b
c

d
e
f" | csplit -s - '/^$/'
Run Code Online (Sandbox Code Playgroud)

要么

csplit -s filename '/^$/'
Run Code Online (Sandbox Code Playgroud)

(假设的"文件名"的内容是一样的回声的输出)会产生,在这种情况下,两个文件名为"XX00"和"XX01".例如,前缀可以从"xx"更改为"outfile",-f outfile并且文件名中的位数可以更改为3 -n 3.如果需要处理Macintosh行结尾,可以使用更复杂的正则表达式.

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

csplit -s filename '/^$/' '{*}'
Run Code Online (Sandbox Code Playgroud)

该图案'{*}'使前面的图案尽可能多地重复.

  • +1您也可以使用它将文件拆分成2个以上的部分. (5认同)

Joh*_*ica 14

$ cat test.txt
a
b
c

d
e
f
$ sed '/^$/q' test.txt 
a
b
c

$ sed '1,/^$/d' test.txt 
d
e
f
Run Code Online (Sandbox Code Playgroud)

更改/^$//^\s*$/,如果你希望有可能是空白的空行.

  • 它可能应该是`/ ^\r $ /`(或者只是'/ ^\r?$ /`) (3认同)