Linux系统之csplit命令详解
·
csplit 是一个用于根据上下文行将文件分割成多个部分的工具。它会按照指定的模式(patterns)将输入文件分割,并将每个部分输出到单独的文件中(默认命名为 xx00, xx01 等),同时将每个部分的字节数输出到标准输出。
基本语法
csplit [选项]... 文件 模式...
主要选项
| 选项 | 描述 |
|---|---|
-b, --suffix-format=格式 |
使用指定的 printf 格式代替默认的 %02d 作为后缀格式 |
-f, --prefix=前缀 |
使用指定的前缀代替默认的 xx |
-k, --keep-files |
出错时保留输出文件(默认会删除) |
-m, --suppress-matched |
不输出匹配模式的行 |
-n, --digits=数字 |
使用指定数字位数代替默认的 2 位 |
-s, --quiet, --silent |
不显示输出文件大小的计数 |
-z, --elide-empty-files |
删除空输出文件 |
--help |
显示帮助信息 |
--version |
显示版本信息 |
模式说明
每个模式可以是以下形式之一:
-
整数:复制到但不包括指定行号
csplit file 10 # 在第10行处分割文件 -
/正则表达式/[偏移量]:复制到但不包括匹配行
csplit file '/Chapter/' # 在每个"Chapter"出现处分割 -
%正则表达式%[偏移量]:跳过到但不包括匹配行
csplit file '%^Introduction%' # 跳过到"Introduction"之前 -
{整数}:重复前一个模式指定次数
csplit file '/Section/' {3} # 在前三个"Section"出现处分割 -
{*}:尽可能重复前一个模式
csplit file '/Chapter/' {*} # 在所有"Chapter"出现处分割
偏移量:可以是 + 或 - 后跟一个正整数,表示相对于匹配行的偏移。
使用示例
-
基本分割:
csplit book.txt '/Chapter/' {*}这将按每个"Chapter"将
book.txt分割为多个文件。 -
自定义前缀和数字位数:
csplit -f part -n 3 data.txt 100 200生成的文件将命名为
part000,part001等。 -
跳过前导内容:
csplit document.txt '%^Abstract%' '/Section/' {*}先跳过到"Abstract"之前,然后在每个"Section"处分割。
-
处理空文件:
csplit -z logfile '/=====/' {*}自动删除任何空的分割文件。
-
从标准输入读取:
cat largefile.txt | csplit - -1000 {*}每1000行分割一次标准输入。
-
多模式分割:
# 按多个模式分割
csplit file.txt '/START/' '/MID/' '/END/'
# 生成 3 个文件:
# xx00(START 前)、xx01(START 到 MID 前)、xx02(MID 到 END 前)、xx03(END 后)
- 处理大文件:
# 分割日志文件为每日日志(假设每行以日期开头)
csplit log.txt '%^2023-01-01%' '{*}'
# 每次匹配新日期时分割
更多推荐



所有评论(0)