使用 perl 或 grep 复制文本文件中的特定文本

使用 perl 或 grep 复制文本文件中的特定文本

我需要复制纯文本文件的一部分,如下所示:

文本文件由一系列“页面”组成,其形式为:

<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
  1. gawk在3.1.8和mawk3.3中测试

相关内容