【busybox记录】【shell指令】csplit

本文详细介绍了Linux中的csplit命令,包括其功能、模式参数的详细解释、文件分割示例以及与Busybox的关系。重点展示了如何按行、正则表达式、数字长度和重复规则分割文件,以及相关选项如输出文件命名、静默模式等。
摘要由CSDN通过智能技术生成

目录

内容来源:

【GUN】【csplit】指令介绍

【busybox】【csplit】指令介绍

【linux】【csplit】指令介绍

使用示例:

分割文件 - 指定文件前缀,后缀,按指定行分割成两个

分割文件 - 指定文件前缀,后缀,按指定行分割成多个

分割文件 - 指定文件前缀,指定名字中数字的长度

分割文件 - 指定文件前缀,使用匹配模式,匹配行(+-N行)之前的输出文件,匹配行后的输出文件

分割文件 - 指定文件前缀,使用匹配模式,匹配行之前的输出文件,匹配行后的输出文件

分割文件 - 指定文件前缀,使用匹配模式,匹配行之前的输出文件,匹配行后的输出文件,不同规则匹配,生成多个文件

分割文件 - 指定文件前缀,使用匹配模式,匹配行之前的输出文件,匹配行后的输出文件,同一规则多次匹配

分割文件 - 指定文件前缀,使用匹配模式,匹配行之前的输出文件,匹配行后的输出文件,同一规则匹配整个文件

分割文件 - 指定文件前缀,使用匹配模式,只输出匹配行后的文件

分割文件 - 指定文件前缀,使用匹配模式,只输出匹配行后的文件,同一规则匹配整个文件

分割文件 - 指定文件前缀,使用匹配模式,匹配行之前的输出文件,匹配行后的输出文件,匹配整个文件,但是不输出匹配行

分割文件 - 静默模式,不打印分割后文件大小,默认打印

常用组合指令:

指令不常用/组合用法还需继续挖掘:


内容来源:

        GUN : Coreutils - GNU core utilities

        busybox v1.36.1 : 【busybox记录】【shell指令】基于的Busybox的版本和下载方式-CSDN博客

【GUN】【csplit】指令介绍

csplit:将文件分割为上下文确定的片段
csplit 创建零个或多个包含输入部分的输出文件(如果input为'-',则为标准输入)。
简介:
csplit [option]... input pattern...
输出文件的内容由模式参数决定,详情如下。
	如果模式参数引用了输入文件中不存在的一行(例如,没有剩余的行与给定的正则表达式匹配),则会发生错误。
	匹配完所有模式后,将剩余的输入复制到最后一个输出文件中。
	默认情况下,csplit在创建输出文件后打印写入每个输出文件的字节数。

模式参数的类型如下:
‘n’ 
	创建一个输出文件,其中包含从第n行开始但不包括第n行(一个正整数)的输入。如果后面是重复计数,则每次重复都创建一个输出文件,其中包含输入文件的下n行。
‘/regexp/[offset]’
	创建一个输出文件,其中包含当前行,直到(但不包括)下一行匹配regexp的输入文件。
	可选的偏移量是一个整数,可以在前面加上'+'或'-'。如果指定了,则输入直到(但不包括)匹配的加减偏移量的行被放入输出文件中,在匹配的加减偏移量之后的行开始下一段输入。
	在regexp模式的负偏移量内的行在后续的regexp模式中不匹配。
‘%regexp%[offset]’
	与前一个类型类似,不同之处在于它不创建输出文件,因此输入文件的那部分实际上被忽略了。
‘{repeat-count}’
	重复前面的模式repeat-count额外的次数。repeat-count可以是一个正整数,也可以是一个星号,这意味着需要重复多次,直到耗尽输入。

输出文件的名称由前缀(默认为`xx`)和后缀组成。默认情况下,后缀是两位小数的升序序列,从'00'到'99'。
在任何情况下,按照文件名的排序顺序连接输出文件都会生成原始的输入文件,不包括用%regexp%模式或--suppress-matched选项跳过的部分。
默认情况下,如果csplit遇到错误或接收到挂起、中断、退出或终止信号,它将在退出之前删除它迄今为止创建的任何输出文件。
该程序接受以下选项。参见第2章[常见选项],第2页。

‘-f prefix’
‘--prefix=prefix’
	使用prefix作为输出文件名的前缀。
‘-b format’
‘--suffix-format=format’
	使用format作为输出文件名的后缀。指定此选项时,后缀字符串必须包含一个printf(3)风格的转换规范,可能包括格式规范标志、字段宽度、精度规范或所有这些类型的修饰符。
	格式字母必须将二进制无符号整数参数转换为可读形式。格式字母`d`和`i`是`u`的别名,并且允许`u`、`o`、`x`和`X`的转换。
	整个格式(连同当前输出文件编号)提供给sprintf(3),以依次形成每个单独输出文件的文件名后缀。如果使用了这个选项,--digits选项将被忽略。
‘-n digits’
‘--digits=digits’
	使用包含数字长度的输出文件名,而不是默认的2。
‘-k’
‘--keep-files’
	遇到错误时不要删除输出文件。
‘--suppress-matched’
	不要输出与指定模式匹配的行。也就是说,从第二次和后续分割的开始抑制边界线。
‘-z’
‘--elide-empty-files’
	禁止生成零长度输出文件。(如果输入文件的节定界符用于标记每个节的第一行,则第一个输出文件通常为零长度文件,除非使用此选项。)输出文件序列号总是从0开始连续运行,即使指定了这个选项。
‘-q’
‘--silent’
‘--quiet’ 
	不打印输出文件大小的计数。

退出状态为零表示成功,非零值表示失败。
下面是它的用法示例。首先,为练习创建一个空目录,并cd到其中:

$ mkdir d && cd d
Now, split the sequence of 1..14 on lines that end with 0 or 5:
$ seq 14 | csplit - '/[05]$/' '{*}'
8
10
15
Each number printed above is the size of an output file that csplit has just created. List the names of those output files:
$ ls
xx00 xx01 xx02
Use head to show their contents:
$ head xx*
==> xx00 <==
1
2
3
4
==> xx01 <==
5
6
7
8
9
==> xx02 <==
10
11
12
13
14
Example of splitting input by empty lines:
$ csplit --suppress-matched input.txt '/^$/' '{*}'

【busybox】【csplit】指令介绍

NA

【linux】【csplit】指令介绍

[root@localhost bin]# csplit --help
用法:csplit [选项]... 文件 格式...
Output pieces of FILE separated by PATTERN(s) to files 'xx00', 'xx01', ...,
and output byte counts of each piece to standard output.

如果文件为“-”,则读取标准输入。

必选参数对长短选项同时适用。
  -b, --suffix-format=FORMAT  use sprintf FORMAT instead of %02d
  -f, --prefix=PREFIX        use PREFIX instead of 'xx'
  -k, --keep-files           do not remove output files on errors
      --suppress-matched     suppress the lines matching PATTERN
  -n, --digits=数位		使用指定的进制数位代替二进制
  -s, --quiet, --silent	不显示输出文件的尺寸计数
  -z, --elide-empty-files	删除空的输出文件
      --help		显示此帮助信息并退出
      --version		显示版本信息并退出

Each PATTERN may be:
  INTEGER            copy up to but not including specified line number
  /REGEXP/[OFFSET]   copy up to but not including a matching line
  %REGEXP%[OFFSET]   skip to, but not including a matching line
  {INTEGER}          repeat the previous pattern specified number of times
  {*}                repeat the previous pattern as many times as possible

A line OFFSET is a required '+' or '-' followed by a positive integer.

GNU coreutils 在线帮助:<https://www.gnu.org/software/coreutils/>
请向 <http://translationproject.org/team/zh_CN.html> 报告 csplit 的翻译错误
完整文档请见:<https://www.gnu.org/software/coreutils/csplit>
或者在本地使用:info '(coreutils) csplit invocation'

使用示例:

分割文件 - 指定文件前缀,后缀,按指定行分割成两个

最后一个参数 6 :从第 6行开始,不包括第6行,分割成两个文件,同时指定前缀和后缀,默认输出是分割文件的大小

指令:csplit -f mytest -b "%d.log" test2.txt 6

分割文件 - 指定文件前缀,后缀,按指定行分割成多个

示例:

从第 6行开始,不包括第6行,前面的行分割成一个文件

剩余的,到第7行,不包括第7行,分割成一个文件

剩余的,到第8行,不包括第8行,分割成一个文件

剩余的,到第9行,不包括第9行,分割成一个文件

剩余的没指定,分割成一个文件

同时指定前缀和后缀,默认输出是分割文件的大小

指令:csplit -f mytest -b "%d.log" test2.txt 6 7 8 9

分割文件 - 指定文件前缀,指定名字中数字的长度

-n参数指定了数字的长度,如果和-b参数一起使用,-b优先级更高

示例:指定文件名中数字长度为3,默认为2

指令: csplit -f mytest -n 3 test2.txt 7

分割文件 - 指定文件前缀,使用匹配模式,匹配行(+-N行)之前的输出文件,匹配行后的输出文件

示例: 将文件分成两个,ttt行前面的(不包括ttt字符串)(+-N)为一个文件,后面的为一个文件

向后偏移两行

指令: csplit -f mytest test2.txt '/ttt/+2'

向前偏移两行,发现内容都输出到了第二个文件中了

指令:csplit -f mytest test2.txt '/ttt/-2'

分割文件 - 指定文件前缀,使用匹配模式,匹配行之前的输出文件,匹配行后的输出文件

示例: 将文件分成两个,ttt行前面的(不包括ttt字符串)为一个文件,后面的为一个文件

指令: csplit -f mytest test2.txt '/ttt/'

分割文件 - 指定文件前缀,使用匹配模式,匹配行之前的输出文件,匹配行后的输出文件,不同规则匹配,生成多个文件

示例: 将文件分成两个,ttt行前面的(不包括ttt字符串)为一个文件,后面的为一个文件,后面文件的基础上再匹配 yyy,同前面,再分割

指令: csplit -f mytest test2.txt '/ttt/' '/yyy/'

事实证明,匹配是有先后顺序的,yyy在前,就不会先匹配ttt

指令: csplit -f mytest test2.txt '/yyy/' '/ttt/'

分割文件 - 指定文件前缀,使用匹配模式,匹配行之前的输出文件,匹配行后的输出文件,同一规则多次匹配

示例: 将文件分成多个,ttt行前面的(不包括ttt字符串)为一个文件,后面的为一个文件,然后再次匹配,继续分割

指令: csplit -f mytest test2.txt '/ttt/' '{1}'

指令结尾的 '{1}' 是关键,指定了匹配的次数,达到次数以后就停止,不在继续匹配,当然也可以使用'{*}'一直匹配到文件末尾

如果匹配次数填多了,然后文件中没有这么多,会报错,同时不会输出文件,使用 -k 参数不删除文件也可以生成

分割文件 - 指定文件前缀,使用匹配模式,匹配行之前的输出文件,匹配行后的输出文件,同一规则匹配整个文件

示例: 将文件分成多个,ttt行前面的(不包括ttt字符串)为一个文件,后面的为一个文件,然后再次匹配,继续分割

指令: csplit -f mytest test2.txt '/ttt/' '{*}'

指令结尾的 '{*}' 是关键,一直匹配到文件末尾

分割文件 - 指定文件前缀,使用匹配模式,只输出匹配行后的文件

指令:csplit -f mytest test2.txt '%ttt%'

分割文件 - 指定文件前缀,使用匹配模式,只输出匹配行后的文件,同一规则匹配整个文件

最后的参数 ‘{*}’ 

指令: csplit -f mytest test2.txt '%ttt%' '{*}'

实测,什么都不会输出,也是,每一次匹配都会丢弃前面没匹配到的,确实什么也不会输出

分割文件 - 指定文件前缀,使用匹配模式,匹配行之前的输出文件,匹配行后的输出文件,匹配整个文件,但是不输出匹配行

指令:csplit -f mytest --suppress-matched test2.txt '/ttt/' '{*}'

分割文件 - 静默模式,不打印分割后文件大小,默认打印

-q参数

指令:csplit -f mytest -q test2.txt 7

常用组合指令:

NA

指令不常用/组合用法还需继续挖掘:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦幻面条EW

感谢您的打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值