1

開始点から終了点まですべてをクリーンアップしたい

例:

    <!--
        <group>
                <name>Octopus</name>
                <inventory>
                        <inventoryName>octopus</inventoryName>
                        <decoder>DFFDD</decoder>
                        <command>cat /etc/hosts</command>
                </inventory>
        </group>
 -->

どこ<!--が始点でどこが終点なのか-->内容が終点まで複数行になる場合があります。削除したいタグに含まれるものすべて。

私は次のようなsedでいくつかのことを始めようとしています:

sed 's/^<\!--//g'しかし、終了タグを見たときにすべてをキャッチしてクリーンアップする方法がわかりません。

4

5 に答える 5

3

.改行にも一致する貪欲でない置換正規表現、

$string =~ s|<!-- .*? -->||xsg;
于 2013-07-19T12:53:02.360 に答える
1

Perl ソリューション:

#!/usr/bin/env perl

use strict;
use warnings;

my $filename = $ARGV[0];

open FILE, "<$filename" or die $!;
local $/;
my $text = <FILE>;
close FILE;

$text =~ s/<!--[\s\S]*?-->//g;

open FILE, ">$filename" or die $!;
print FILE $text;
close FILE;

改行を含む任意の文字の最短一致には[\s\S]*?(代わりに)が必要です。改行以外の任意の文字に一致するため、単独では複数行の文字列には機能しません。(.|\n).

次のようにスクリプトを実行します。

./script.pl /path/to/your.file
于 2013-07-19T13:45:48.407 に答える
1

HTML::Parserで同様のスニペットを見つけることができます:

perl -0777 -MHTML::Parser -nE 'HTML::Parser->new(default_h=>[sub{print shift},"text"],comment_h=>[""])->parse($_)||die $!' < file.html >decommented.html

次の html でテスト:

simple
<!-- this is an comment -->
multi
<!--
this is an
multiline comment
-->
stupid
<img src="copen.jpg" alt='image of open tag <!--'>
<img src="cclose.jpg" alt='image of closing tag -->'>
js
<script>
alert("<!-- here -->");
</script>
end

と印刷:

simple

multi

stupid
<img src="copen.jpg" alt='image of open tag <!--'> <img src="cclose.jpg" alt='image of closing tag -->'>
js
<script>
alert("<!-- here -->");
</script>
于 2013-07-19T13:46:01.500 に答える