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

2023-11-25

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

如何以可移植的方式执行此操作(例如使用sed,但没有 GNU 扩展)?人们可以假设空行不会是文件中的第一行。空行可以到达其中一个文件,也可以不到达或同时到达两个文件;这对我来说并不重要。


您可以使用csplit:

echo "a
b
c

d
e
f" | csplit -s - '/^$/'

Or

csplit -s filename '/^$/'

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

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

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

图案'{*}'导致前面的模式尽可能多次地重复。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐