【发布时间】:2010-11-12 23:45:25
【问题描述】:
我有一个 sed 命令,我想在一个巨大的、可怕的、丑陋的 HTML 文件上运行,该文件是从 Microsoft Word 文档创建的。它应该做的就是删除字符串的任何实例
style='text-align:center; color:blue;
exampleStyle:exampleValue'
我要修改的 sed 命令是
sed "s/ style='[^']*'//" fileA > fileB
它工作得很好,除了匹配文本中有新行时,它不匹配。是否有 sed 的修饰符,或者我可以做些什么来强制匹配任何字符,包括换行符?
我知道正则表达式在 XML 和 HTML 中很糟糕,等等等等,但是在这种情况下,字符串模式的格式是正确的,因为样式属性总是以单引号开头并以单引号结尾。因此,如果我能解决换行问题,我可以只用那个命令将 HTML 的大小减少 50% 以上。
最后,事实证明 Sinan Ünür 的 perl 脚本效果最好。它几乎是瞬间完成的,它将文件大小从 2.3 MB 减少到 850k。好老的 Perl...
【问题讨论】:
-
sed 是基于行的。这是这里的主要停止点。如果您使用 /g 正则表达式修饰符,可能有一个命令行选项可以让它将文件作为单个“行”读取,但我对此表示怀疑(内存问题等)
-
没有(据我所知)将文件作为单行读取的选项。我会为此使用 Perl。
-
但是 sed 确实有办法将新行追加到模式空间和保持空间中,因此可以在 sed 中进行多行处理——这并不漂亮。
-
(我把你的回答合并到问题里了,如果思南的回复回答了你的问题,那么点击“打勾”标记为已回答)
标签: html coding-style replace sed newline