我有一个看起来像这样的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