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 显示版本信息

模式说明

每个模式可以是以下形式之一:

  1. 整数:复制到但不包括指定行号

    csplit file 10  # 在第10行处分割文件
    
  2. /正则表达式/[偏移量]:复制到但不包括匹配行

    csplit file '/Chapter/'  # 在每个"Chapter"出现处分割
    
  3. %正则表达式%[偏移量]:跳过到但不包括匹配行

    csplit file '%^Introduction%'  # 跳过到"Introduction"之前
    
  4. {整数}:重复前一个模式指定次数

    csplit file '/Section/' {3}  # 在前三个"Section"出现处分割
    
  5. {*}:尽可能重复前一个模式

    csplit file '/Chapter/' {*}  # 在所有"Chapter"出现处分割
    

偏移量:可以是 +- 后跟一个正整数,表示相对于匹配行的偏移。

使用示例

  1. 基本分割

    csplit book.txt '/Chapter/' {*}
    

    这将按每个"Chapter"将 book.txt 分割为多个文件。

  2. 自定义前缀和数字位数

    csplit -f part -n 3 data.txt 100 200
    

    生成的文件将命名为 part000, part001 等。

  3. 跳过前导内容

    csplit document.txt '%^Abstract%' '/Section/' {*}
    

    先跳过到"Abstract"之前,然后在每个"Section"处分割。

  4. 处理空文件

    csplit -z logfile '/=====/' {*}
    

    自动删除任何空的分割文件。

  5. 从标准输入读取

    cat largefile.txt | csplit - -1000 {*}
    

    每1000行分割一次标准输入。

  6. 多模式分割

# 按多个模式分割
csplit file.txt '/START/' '/MID/' '/END/'
# 生成 3 个文件:
# xx00(START 前)、xx01(START 到 MID 前)、xx02(MID 到 END 前)、xx03(END 后)
  1. 处理大文件
# 分割日志文件为每日日志(假设每行以日期开头)
csplit log.txt '%^2023-01-01%' '{*}'
# 每次匹配新日期时分割
Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐