删除包含模式的HTML元素

时间:2017-05-04 17:12:48

标签: html regex sed

如何删除文件中包含<span>的元素(从</span>PATTERN)?应该删除元素的内容以及元素。

例如,我想删除以下内容中的第一个<span>...</span>元素:

<span><SPAN>some text with
with </SPAN> a PATTERNin it etc</span><span><SPAN>some text
without </SPAN> a thingIn it etc</span>

仅使用SED生成:

<span><SPAN>some text
without </SPAN> a thingIn it etc</span>

PS:对于行尾或单词没有帮助,它必须只检测任何<span>...</span>PATTERN

生产服务器仅允许基本命令,如SED。 我目前正在使用以下内容,但它很丑陋,似乎无法正常工作。

sed '/<span.*\n.*PATTERN.*<\/span>/d'

1 个答案:

答案 0 :(得分:0)

如果HTML:

perl -MXML::LibXML -e'
   my $parser = XML::LibXML->new();
   my $doc = $parser->parse_html_file($ARGV[0]);
   $_->unbindNode()
      for $doc->findnodes(q{//span[contains(text(), "PATTERN")]});

   binmode(STDOUT);
   print($doc->toString());
' in.html >out.html

如果是XHTML:

perl -MXML::LibXML -e'
   my $parser = XML::LibXML->new();
   my $doc = $parser->parse_file($ARGV[0]);
   my $xpc = XML::LibXML::XPathContext->new();
   $xpc->registerNs( h => "http://www.w3.org/1999/xhtml" );
   $_->unbindNode()
      for $xpc->findnodes(q{//h:span[contains(text(), "PATTERN")]}, $doc);

   binmode(STDOUT);
   print($doc->toString());
' in.xhtml >out.xhtml

以上两者都产生以下内容(一些隐含的元素被激活):

<span><SPAN>some text
without </SPAN> a thingIn it etc</span>