如何用Linux单行命令按正则表达式行分隔符拆分文件?
按正则表达式分隔符拆分文件的Linux单行命令
直接用Perl就能实现按正则表达式拆分文件的需求,不需要依赖split命令(它确实不支持多字符分隔符)。以下是单行命令:
perl -ne 'BEGIN { $file_num = 1; open $fh, ">", "myfileprefix_$file_num" or die $!; } if (/theseparatingregexp/) { close $fh; $file_num++; open $fh, ">", "myfileprefix_$file_num" or die $!; next; } print $fh $_;' myfile
命令说明:
-ne:逐行读取输入文件myfile,执行后续代码逻辑- BEGIN块:初始化第一个输出文件,文件编号从1开始,前缀为
myfileprefix_ - 当行内容匹配到你的正则分隔符
theseparatingregexp时:- 关闭当前输出文件
- 文件编号自增,打开新的输出文件
next跳过当前分隔符行(如果需要保留分隔符,删掉next即可)
- 未匹配分隔符的行,直接写入当前打开的输出文件
自定义调整:
- 修改
myfileprefix_为你需要的输出文件前缀 - 调整
/theseparatingregexp/为实际的拆分正则表达式 - 如果要保留分隔符行,移除代码中的
next;,分隔符行会被写入当前文件末尾
内容的提问来源于stack exchange,提问作者kloop
相关产品推荐
相关产品推荐

