次のような XML ファイルがあります。
<Group>
<Name>Awesome Group</Name>
<Notes />
<Date>2013-04-04</Date>
<Expires>False</Expires>
<Icon>7</Icon>
<Tags />
</Group>
このコマンド<Notes />
との間のすべてを印刷しようとしています:</Icon>
$ sed -n '/\<Notes \/\>/ p' file.xml
開き括弧と閉じ括弧、および閉じ括弧の前のスラッシュをエスケープしていることに注意してください。これは一致を返しません。これは奇妙だと思います。
さらに奇妙なのは、このコマンドが機能することです。
$ sed -n '/<Notes \/>/ p' file.xml
開き括弧と閉じ括弧をエスケープしていないのに、このコマンドが機能するのはなぜですか?
編集
ruakh は、sed にはさまざまな実装があり、開き括弧と閉じ括弧をエスケープする必要がないことを指摘してくれました (sed は正規表現に Perl 構文を使用していると思いました)。Unix と Linux に関する別の投稿も役に立ちました。 -sh-スクリプト
現在、複数行の正規表現の一致に問題があります。これがうまくいかないのはなぜですか?
$ sed -n -r '/^<Notes \/>[\S\s]*?<\/Icon>$/ p' file.xml
-r
(拡張モード)の有無にかかわらず、 and の有無にかかわらず、 の^
代わりに$
使用して、すべて一致しないで試しました.*
[\S\s]*