手册页部分 1: 用户命令

退出打印视图

更新时间: 2014 年 7 月
 
 

csplit(1)

名称

csplit - 基于上下文拆分文件

用法概要

csplit [-ks] [-f prefix] [-n number] file arg1... argn

描述

csplit 实用程序读取由 file 操作数指定的文件,根据 arg 操作数的指示将该文件全部或部分写入到其他文件中,并写入文件的大小。

选项

支持以下选项:

–f prefix

将所创建的文件命名为 prefix00prefix01、 ...、prefixn。缺省值为 xx00 ... xxn。如果 prefix 参数将创建超过 14 个字节的文件名,则会产生错误。在那种情况下,csplit 将退出并显示一条诊断消息,并且不会创建文件。

–k

将以前创建的文件保留不变。缺省情况下,如果发生错误,则 csplit 会删除已创建的文件。

–n number

使用 number 个十进制数字构成文件片段的文件名。缺省值为 2

–s

禁止文件大小消息的输出。

操作数

支持下列操作数:

file

要拆分的文本文件的路径名。如果 file-,则将使用标准输入。

操作数 arg1 ... argn 可以是以下项的组合:

/rexp/[offset]

使用从当前行开始直至(但不包括)由包含 offset(如果已应用)的正则表达式计算得到的行的内容创建一个文件。正则表达式 rexp 必须遵守基本正则表达式的规则。正则表达式中可以使用 '\/' 和 '\%'。必须用单引号将这些形式正确地括起来,因为 “\” 对于 shell 具有特殊含义。可选的 offset 必须是一个表示行数的正整数或负整数值。该整数值前必须带有 +。如果通过这种类型的偏移表达式选择的行将创建一个包含零行的文件,或者将创建一个大于输入文件中所保留的行数的文件,则结果不可预测。在创建片段后,当前行将被设置为由应用了任何偏移的正则表达式计算得到的行。模式匹配 rexp 始终从当前行一直应用到文件末尾。

%rexp%[offset]

此操作数与 /rexp/[offset] 相同,只是不会为输入文件的选定片段创建文件。

line_no

创建一个包含从当前行直至(但不包括)行号 line_no 的内容的文件。文件中的行将从 1(一)开始编号。当前行成为 line_no

{num}

重复操作数。此操作数可以跟在前面所述的任何操作数之后。如果它跟在 rexp 类型的操作数后,则该操作数将多应用 num 次。如果它跟在 line_no 操作数后,则文件将从该点开始每 line_no 行拆分一次,拆分 num 次。

如果某个操作数未引用介于当前位置与文件末尾之间的行,则会报告错误。

用法

有关 csplit 遇到大于或等于 2 GB(231 字节)文件时行为的说明,请参见 largefile(5)

示例

示例 1 拆分和组合文件

此示例创建四个文件:cobol00...cobol03


example% csplit -f cobol filename \
   '/procedure division/' /par5./ /par16./

在编辑拆分的文件后,可以按如下方式重新组合它们:

example% cat cobol0[0−3] > filename

此示例覆盖原始文件。

示例 2 将文件拆分为相同大小的部分

此示例每 100 行拆分一次文件,直至 10,000 行。–k 选项的作用是,即使行数少于 10,000 行,也保留已创建的文件;不过,在这种情况下,仍然会输出一条错误消息。

example% csplit -k filename 100 {99}
示例 3 为单独的 C 例程创建文件

如果 prog.c 遵守常规的 C 编码约定(例程的最后一行仅包含一个 },且该字符位于第一个字符处),则此示例将为 prog.c 中每个单独的 C 例程创建一个文件(直至 21)。

example% csplit -k prog.c '%main(%' '/^}/+1' {20}

环境变量

有关影响 csplit 执行的以下环境变量的说明,请参见 environ(5):LANG、LC_ALL、LC_COLLATE、LC_CTYPE、LC_MESSAGES 和 NLSPATH。

退出状态

将返回以下退出值:

0

成功完成。

>0

出现错误。

属性

有关下列属性的说明,请参见 attributes(5)

属性类型
属性值
可用性
system/core-os
CSI
Enabled(已启用)
接口稳定性
Committed(已确定)
标准
请参见 standards(5)

另请参见

sed(1)split(1)attributes(5)environ(5)largefile(5)standards(5)

诊断

大部分诊断消息是不需要加以说明的,除了以下这条:

arg − out of range

指定的参数没有引用介于当前位置与文件末尾之间的行。