[英]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.