如何使用sed或任何其他命令删除流之间的所有行

莱昂内尔

我有一个pdf文件,我想删除Rstream和efd流之间的所有行。这是文档的样子

PDFNUM NUM obj/Type/XObject/Subtype/Image/Width NUM/Height NUM/BitsPerCompofeft NUM/ColorSpace/DeviceGray/Filter[/DCTDecode]/DecodeParms[]/Lefgth NUM NUM RstreamJFIFddC
(NUMAQaqNUMBRNUMbr()NUMCDEFGHIJSTUVWXYZcdefghijstuvwxyzNUMAQaqNUMBRNUMbr()NUMCDEFGHIJSTUVWXYZcdefgh
.....
.....
((((((((((((((QEQEQEQEQEW((((((((((((((((((((((((((((((((((((((((((((((efdstreamefdobjNUM NUM objNUMefdobjNUM NUM obj/Lefgth NUM NUM RstreamqNUM NUM NUM NUM NUM NUM cm/INUM DoQefdstreamefdobjNUM NUM objNUMefdobjNUM NUM obj/Type/Page/Pareft NUM NUM R/Resources NUM NUM R/Rotate NUM/MediaBox[NUM NUM NUM NUM]/Coftefts[NUM NUM R]efdobjNUM NUM obj/ProcSet[/PDF/ImageB/Text]/XObject/INUM NUM NUM RefdobjNUM NUM obj/CreatiofDate (DNUM)/Producer (SamsufgMNUMLX)/Creator (ScafPDFMaker NUM)efdobjNUM NUM obj/Type/Pages/Couft NUM/Kids[NUM NUM R ]efdobjNUM NUM obj/Type/Catalog/Pages NUM NUM RefdobjxrefNUM NUM NUM f NUM NUM f NUM NUM f NUM NUM f NUM NUM f NUM NUM f NUM NUM f NUM NUM f NUM NUM f NUM NUM f trailer/Size NUM/Iffo NUM NUM R/Root NUM NUM RstartxrefNUMEOF

我该如何使用sed删除顶部(我的文档开始)的Rstream和几乎底部的efdstream之间的所有内容,以仅遵守文档规范,例如生产者,创建者等

我找到了模式并缩小了原始文档。我使用sed命令用一个单词NUM重命名了所有模式,以便我可以轻松地看到要删除的内容。这里是

-$ cat path | tr \n \f | tr -cd "[A-Za-z0-9 ()/\f]" | sed s/stream.*endstream/STREAM/| sed s/[0-9][0-9]*/NUM/g | sed "s/NUM NUM n/PTR/g".

这只会用单词NUM代替。结果应仅保留文件的底部

objNUMefdobjNUM NUM obj/Lefgth NUM NUM RstreamqNUM NUM NUM NUM NUM NUM cm/INUM DoQefdstreamefdobjNUM NUM objNUMefdobjNUM NUM obj/Type/Page/Pareft NUM NUM R/Resources NUM NUM R/Rotate NUM/MediaBox[NUM NUM NUM NUM]/Coftefts[NUM NUM R]efdobjNUM NUM obj/ProcSet[/PDF/ImageB/Text]/XObject/INUM NUM NUM RefdobjNUM NUM obj/CreatiofDate (DNUM)/Producer (SamsufgMNUMLX)/Creator (ScafPDFMaker NUM)efdobjNUM NUM obj/Type/Pages/Couft NUM/Kids[NUM NUM R ]efdobjNUM NUM obj/Type/Catalog/Pages NUM NUM RefdobjxrefNUM NUM NUM f NUM NUM f NUM NUM f NUM NUM f NUM NUM f NUM NUM f NUM NUM f NUM NUM f NUM NUM f NUM NUM f trailer/Size NUM/Iffo NUM NUM R/Root NUM NUM RstartxrefNUMEOF
洛达米拉

您可以在此处使用sed,但Perl具有更强大的正则表达式,是大多数sed正则表达式的替代品。

要删除从第一次出现的Rstream到最后一次出现的efdstream的所有数据,请执行以下操作:

perl -0777 -pe 's/Rstream.*efdstream//s' <filename.pdf >new.pdf

要删除每个Rstream和efdstream之间的所有数据:

perl -0777 -pe 's/Rstream.*?efdstream//sg' <filename.pdf >new.pdf

-0777表示一次读取整个文件并对其进行操作,而不是逐行读取。这对于多行替换是必需的。-pe表示这是一个流式内衬。参见http://perldoc.perl.org/perlrun.html

另请阅读以下正则表达式参考:

  1. http://perldoc.perl.org/perlretut.html
  2. http://perldoc.perl.org/perlre.html
  3. http://perldoc.perl.org/perlreref.html

Perl具有所有语言中最强大的正则表达式。如果需要,您可以为任务编写完整的解析器。

高温超导

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用sed,awk或任何其他命令填充结束标签?

从 Pandas 数据框中删除“支配”行(所有值都低于任何其他行值的行)

如何使用LINQQ或任何其他方法为所有行更新数据表的第一列?

如何使用osmfilter过滤所有便利设施以及它们拥有的任何其他标签信息?

删除任何其他相邻列中具有重复值的行

如何匹配文本之间的任何其他字符

如何使用 siri 或任何其他语音激活库嵌入我的应用程序命令

如何使用 execvp 或任何其他 exec 僅在一個文件上運行?

制作事件后无法使用任何其他命令删除频道 Discord.py 中的消息

如何使用ffmpeg水平分割视频(没有任何其他副作用)?

如何使用 JQuery 或任何其他技术加载底部

Android - 单击任何其他选项时禁用所有其他选项

如何使用正则表达式提取器或任何其他提取器(Xpath,Beanshell等)从下面给出的Json中提取所有Id值

如何在使用任何其他数据库时获取JavaScript中所有mongo数据库的列表?

使用SED删除单个重复模式之间的所有行

如何在执行任何其他命令之前执行“清除” bash命令?

使用命令提示符识别 PowerBI 中的工作区/数据集/数据流/报告等(或任何其他方法)

选择其用户没有任何其他活动订阅的所有订阅

使用 sed 或任何其他命令將一行的一部分從 file1 複製到 file2 中的特定位置

在我的xcopy命令之前检查是否有任何其他副本在处理中

当用户单击任何其他控件时,从DataGrid中删除选定的行

打开html链接标记中的所有url,而不转换任何其他javascript链接

选择不是任何其他文件SQL父级的所有文件

列出目录中的所有文件夹,忽略任何其他文件

如何将“ ls”(或任何其他shell命令)的输出重定向到管道?

如何读取JSON文件,而无需使用JSON libarary或没有任何其他libarary在字典或列表?

如何在输出中使用带有任何其他符号的单个 utf-8 字符?

如何使用sed \ awk在文件中查找某些行,然后匹配与其他模式匹配的所有后续行?

使用jq或任何其他bash命令将JSON转换为CSV