2009-11-12 29 views
7

XMLでコメントを削除するにはどうすればよいですか?Vim - XMLコメントを削除する

開始と終了のコメントタグが同じ行にある場合は、:g/^<!--.*-->$/dを使用してコメントを削除します。多くの行に広がっているコメントを削除するには?

答えて

17

\_.代わりの.は、改行を含むすべての文字に一致することができます試すことができます。しかし、それだけで正規表現エンジンはデフォルトで貪欲であるため、船外に出ることになります。非貪欲な一致の場合は*の代わりに\{-}を使用してください。

g/ /dコマンドは1行だけを削除するため(複数行一致の場合でも)s///g(グローバル置換)に切り替えることをお勧めします。

:%s/<!--\_.\{-}-->//g

+0

これは素晴らしいことでした!ありがとう! –

2

XSLTを使用してファイルを新しいファイルに変換する必要があります。アイデンティティ変換を使用して、コメントをコピーしないようにする追加のルールを使用します。あなたは私はあなたがvimのから実行することができます想像スクリプトとしてこれを行うには、Linux上でlibxsltのパッケージに「xsltprocの」を使用することができ

<xsl:template match="node()|@*"> 
    <xsl:copy> 
    <xsl:apply-templates select="@*"/> 
    <xsl:apply-templates/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="comment()"/> 

0

私は、これは動作するはずと信じて:

:g/<!--.*?-->/d 

疑問符が、それは式を満たすためにできるだけ一致する意味、アスタリスクは「怠惰」の代わりに「貪欲」になります。これは、この例の中央部分を取り除いからの発現を防ぐ:

We want to keep this<!-- This is a comment -->We also want to keep this<!-- Another comment --> 

EDIT:正規表現のvimの味のように見えるが*?怠惰なマッチングをサポートしていません。私の悪い。

+0

何マルチラインについて? – ghostdog74

0

あなたのシステムにあまりにも多くの手間とあなたが気づいていない場合は、あなたはこの

$ more file 
<!-- 
asdlfj 
sdjf 
;jsgsdgjasl --> 
text i want 
i want 
.... 
<!-- junk junk --> 
i want text 
anthor text 
end 

$ gawk -vRS='-->' '{ gsub(/<!--.*/,"")}1' file 


text i want 
i want 
.... 


i want text 
anthor text 
end 
+0

gsub()コールの最後に "1"を説明できますか? –

+0

あなたは別の方法で書くことができます:gawk -vRS = ' - >' '{gsub(/

+0

da>はうまくいきます。ファイルからこれを繰り返す方法を教えてください。 –

+0

@Vijay、申し訳ありませんが、私は分かりません。提案された元のregexpを使用する必要があります。 –

関連する問題