按模式拆分文件

时间:2012-08-06 08:39:54

标签: regex split

我在使用模式拆分文件时遇到了麻烦。

我的大文件是一个看起来像这样的文本

PATTERN
data
data
data PATTERN

问题在PATTERN位于行尾时开始,csplit占用整行并将其放入下一个文件中:

data_belonging_to_the_above_file PATTERN
data
data

我需要将data_belonging_to_the_above_file放在上一个文件中

这是我现在使用的命令:

csplit data.log /PATTERN/ {*}

1 个答案:

答案 0 :(得分:1)

与之前的评论类似,我的解决方案是使用替代品预处理您的文件。 我试过这个:

perl -pe 's/(?<!^)(PATTERN)/\n\1/mg;s/(PATTERN)(?!$)/\1\n/mg'

如果模式不在行的开头,则在模式之前添加换行符,如果模式不在行的末尾,则在模式之后添加换行符。 我使用perl是因为不是每个版本的sed都支持这个表达式。