如何删除文件中包含<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'
答案 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>