我有一个如下所示的 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 的帖子也很有帮助:https ://unix.stackexchange.com/questions/32907/what-characters-do-i-need-to-escape-when-using-sed-in-a -sh脚本
现在我在匹配多行正则表达式时遇到问题。这怎么行不通?
$ sed -n -r '/^<Notes \/>[\S\s]*?<\/Icon>$/ p' file.xml
我尝试过使用和不使用-r
(扩展模式),使用和不使用^
and $
,使用.*
而不是[\S\s]*
,所有都没有匹配