我有一個看起來像這樣的XML文件:SED正則表達式不匹配
<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也很有幫助:https://unix.stackexchange.com/questions/32907/what-characters-do-i-need-to-escape-when-using-sed-in-a-sh-script
現在我遇到了一個匹配多行正則表達式的問題。這是怎麼回事?
$ sed -n -r '/^<Notes \/>[\S\s]*?<\/Icon>$/ p' file.xml
我已經試過與不-r
(擴展模式),有和沒有^
和$
,使用.*
代替[\S\s]*
,所有沒有匹配
我以爲sed是基於Perl的。謝謝你清理那個。 – 2013-04-04 18:04:52
我知道我可以使用一個範圍,但我認爲必須有一種方法來在sed中執行多行正則表達式。但是,這很有效。謝謝。 – 2013-04-04 18:52:11
@ davidkennedy85:實際上,sed早於perl,並且perl意圖作爲更普遍的sed替代品(參見[原始公告](http://groups.google.com/group/comp.sources .unix /樹/ browse_frm /月/ 1988年至1902年?_done =%2Fgroup%2Fcomp.sources.unix%2Fbrowse_frm%2Fmonth%2F1988-02%3F&))。 – 2013-04-04 20:29:43