繁体   English   中英

csplit命令中的正则表达式中有多个定界符

[英]More than 1 delimiter in regular expression in csplit command

我正在尝试使用csplit命令通过3个字符串定界符来分割文件,但是我遇到了问题。 我没有让cplist与定界符列表一起工作。 这是我正在尝试的方法:

我有这个文件:

 TRANSHEADER002_XA
 XAL1
 XAL2
 XAL3
 TRANSHEADER001_EXEC
 EXECL1
 EXECL2
 EXECL3
 TRANSHEADER003_YB
 YBL1
 YBL2
 YBL3
 TRANSHEADER002_XA
 XAL1A
 XAL2A
 XAL3A

这些是字符串定界符

 TRANSHEADER002_XA
 TRANSHEADER001_EXEC
 TRANSHEADER003_YB

但是当我尝试使用csplit命令以及多个定界符时,我没有成功,如下

 csplit -k -s -f "$file"_split. "$file" "/^\(TRANSHEADER002_XA\|TRANSHEADER001_EXEC\|TRANSHEADER003_YB\)/" "{999}"
 csplit -k -s -f "$file"_split. "$file" "/^(TRANSHEADER002_XA|TRANSHEADER001_EXEC|TRANSHEADER003_YB)/" "{999}"
 csplit -k -s -f "$file"_split. "$file" "/^TRANSHEADER002_XA|^TRANSHEADER001_EXEC|^TRANSHEADER003_YB/" "{999}"

对于上面的任何命令,我都收到如下所示的“超出范围”错误

 /^\(TRANSHEADER002_XA\|TRANSHEADER001_EXEC\|TRANSHEADER003_YB\)/ - out of range

我想如下分割文件

 --> file_split.01
 TRANSHEADER002_XA
 XAL1
 XAL2
 XAL3

 --> file_split.02
 TRANSHEADER001_EXEC
 EXECL1
 EXECL2
 EXECL3

 --> file_split.03
 TRANSHEADER003_YB
 YBL1
 YBL2
 YBL3

 --> file_split.04
 TRANSHEADER002_XA
 XAL1A
 XAL2A
 XAL3A

你们知道我如何通过使用csplit或使用另一个可以给我如上所示的拆分文件的命令来做到这一点吗?

非常感谢你!

您不应将模式重复999次,而应使用一个设计为根据需要重复多次的选项: {*}

csplit -kszf "$file"_split. "$file" "/^TRANSHEADER002_XA\|TRANSHEADER001_EXEC\|TRANSHEADER003_YB/" "{*}"

还可以使用-z选项删除空的输出文件。

使用您的示例文件,这对我有用:

csplit -zksf file_split. csplit.test.txt '/^TRANSHEADER\(002_XA\|001_EXEC\|003_YB\)/' '{*}'

使用{*}消除超出范围的错误,因为它会匹配尽可能多的次数,而不是尝试999次。

我还减少了您的正则表达式,但是这很重要。

(我看到Michal击败了我)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM