在带有Form Feed Regex的Bash脚本中使用csplit

wmvff8tz  于 2023-06-30  发布在  其他
关注(0)|答案(3)|浏览(75)

我有一个打印输出文件(uncomp.txt),其中包含换页。我尝试根据\f正则表达式匹配将单个文档拆分为多个文档,并输出带有epoch时间的文件。
我试过这个:

$ csplit --prefix=$(date +%s) -s  /tmp/uncomp.txt "/%\f%/+1" "{*}"

还有这个

$ csplit --prefix=$(date +%s) -s  /tmp/uncomp.txt "/\f/+1" "{*}"

甚至还有这个

$ csplit -s  --prefix=$(date +%s) /tmp/uncomp.txt /\f/ {*}

但每次我都以一个文件结束。它显然没有接收\f正则表达式…我做错了什么?

hgqdbh6s

hgqdbh6s1#

bash解决方案

看起来csplit在它的正则表达式中需要一个文本formfeed。实现这一点的一种方法是使用bash的$'...'结构:

csplit --prefix=$(date +%s) -s  uncomp.txt $'/\f/+1' "{*}"

POSIX解决方案

如果你没有bash,你可以使用printf

csplit --prefix=$(date +%s) -s  uncomp.txt "/$(printf "\f")/+1" "{*}"

或者,等价地:

csplit --prefix=$(date +%s) -s  uncomp.txt "$(printf "/\f/+1")" "{*}"
hrysbysz

hrysbysz2#

就像这样尝试,使用the standalone bash shell for windows

csplit -z --prefix=Stored dumpstored.sql /^L/ "{*}"

其中我通过按CTRL+L获得^L。对我很有效。

yxyvkwin

yxyvkwin3#

我不相信你想要正则表达式后面的“+1”。对我来说,这会将每一页的第一行移到上一页。(顺便说一句,关于$'...'构造的解释,请在bash手册页中搜索字符串'ANSI C'。

相关问题