我有一个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逐行遍历输入文件,这意味着,据我所知,你想要的东西在sed中是不可能的.
您可以使用以下Perl脚本(未经测试):
#!/usr/bin/perl use strict; use warnings; { local $/; # slurp mode my $html = <>; $html =~ s/ style='[^']*'//g; print $html; } __END__
一个班轮将是:
$perl -e 'local $/; $_ = <>; s/ style=\047[^\047]*\047//g; print' fileA > fileB