我需要复制纯文本文件的一部分,如下所示:
文本文件由一系列“页面”组成,其形式为:
<page [lots of lines of text] /page>
<page [lots of lines of text] /page>
<page [lots of lines of text] /page>
<page [lots of lines of text] /page>
我需要一种自动方式来复制第三个这样的“页面”。是否有捷径可寻? (类似地将“3rd”替换为“23rd”等)
理想情况下,我想要一个 bash 脚本来解压缩文件,然后在生成的文本文件中进行复制,然后重新压缩它。这样做的目的是让 xournal 复制页面。
答案1
您可能应该为此使用真正的标记解析器,但是至少将格式描述解释为
<page line one
line two /page>
<page line three
line four /page>
<page line five
line six /page>
那么如果快速的awk
解决方案1是可以接受的,你可以这样做
awk -v pagenum=2 'BEGIN {RS="/page>"; ORS=RS} FNR==pagenum {print} 1' file
或者,不那么神秘
awk -v pagenum=2 'BEGIN {RS="/page>"; ORS=RS}; FNR==pagenum {print}; {print}' file
其中您希望复制的页码是通过参数从 shell 传递的-v pagenum=
。
如果最后一个标签后面有“stuff”,/page>
上面的表达式可能会将其视为不完整的记录,并添加一个虚假的结束/page>
记录分隔符。在这种情况下,以下修改后的表达式可能效果更好
awk -v pagenum=2 'BEGIN {RS="/page>"; ORS=""; OFS=""} FNR==pagenum {print $0,RT} {print $0,RT}' file
gawk
在3.1.8和mawk
3.3中测试