如何将两个匹配模式之间的文本提取到多个文件?

如何将两个匹配模式之间的文本提取到多个文件?

我有二进制文件,我想通过 START 和 END 模式将其拆分为单独的文件。输入示例:

yut786y= 3&*%^#$%fsd{'StartOfFile': sdflklfasdgjw723gsdf67asfr55a64
asduf hfna089FUAO
AHF78QAB6A SDFADSFGfh asiug6a8osiofh7qw8e6fgha
fq9w46tygvkabsdjfnhc :End}}fji8yEBFBOA NFmc

相似的块(但不相同)可以在输入文件中重复

结果应该是:

{'StartOfFile': sdflklfasdgjw723gsdf67asfr55a64
asduf hfna089FUAO
AHF78QAB6A SDFADSFGfh asiug6a8osiofh7qw8e6fgha
fq9w46tygvkabsdjfnhc :End}}

每个文件块

我尝试awk '/{'\''StartOfFile'\'':/,/End}}/' file > export; 然后awk '/StartOfFile/{filename=NR".txt"}; {print >filename}' export分割成文件。

但第一行和最后一行仍然有不需要的字符。如何切割它们?字符和数量未知

答案1

您可以使用下面的单个 awk 来完成此操作:

awk -v RS="{'StartOfFile'" 'NR>1{sub(/End}}.*/,"End}}"); print RS$0>NR-1".txt"}' infile

我运行了以下示例输入:

{'StartOfFile': Unix.stackexchange.com End}}
yut786y= 3&*%^#$%fsd{'StartOfFile': sdflklfasdgjw723gsdf67asfr55a64
asduf hfna089FUAO
AHF78QAB6A SDFADSFGfh asiug6a8osiofh7qw8e6fgha
fq9w46tygvkabsdjfnhc :End}}fji8yEBFBOA NFmc

72 YOY398Y 9Y9&y&*t*#&y(*yH{'StartOfFile':uih4yUH OG8YG*^t&^t*&o y(yt&*wt*&(0
jfhi hwuw hfuweh012r892u 098Y&*T*#^98 yHO
OFUH idueg&*#trt& goe
ouh#ye(e#y( geiyfgefyg #O WIBCJHvKKJSLSDOLSL*6
asds:End}}JKDSHFLAJHFLAJSDHFLIAUHFILU7869786

输出如下,分为 3 个文件:

1.txt

{'StartOfFile': Unix.stackexchange.com End}}

2.txt

{'StartOfFile': sdflklfasdgjw723gsdf67asfr55a64
asduf hfna089FUAO
AHF78QAB6A SDFADSFGfh asiug6a8osiofh7qw8e6fgha
fq9w46tygvkabsdjfnhc :End}}

3.txt

{'StartOfFile':uih4yUH OG8YG*^t&^t*&o y(yt&*wt*&(0
jfhi hwuw hfuweh012r892u 098Y&*T*#^98 yHO
OFUH idueg&*#trt& goe
ouh#ye(e#y( geiyfgefyg #O WIBCJHvKKJSLSDOLSL*6
asds:End}}

相关内容