目录
分割文件 - 指定文件前缀,使用匹配模式,匹配行(+-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