2011-10-15 74 views
0

我可能失去了一些东西真的很明显使用正则表达式,但我有我需要到grep,看它是否包含此XML文件:有困难的grep中

<phone>null</phone><phone></phone>

在任何情况下,以及任何额外的空间(标签之间)。

所以,我不工作的解决方案是这样的:

grep -i "\<phone\>\s*(null)?\s*\</phone\>" ./myfile.xml 

但是返回空(即使我使用的文件具有此节点)。 我能忽略什么?

TIA

+0

如果你输入的是你在那里,那么你的正则表达式应该工作。我用grep测试了你的正则表达式,它在两种情况下都匹配。 – FailedDev

+0

是啊......我不得不添加-P,我的服务器不能配置为使用默认的perl regEx ...不知道它是否足够进一步推测。 –

回答

1

啊!发现它...我会回答它自己万一别人发现它在未来...添加-P开关即有用...

grep -i -P "\<phone\>\s*(null)?\s*\</phone\>" ./myfile.xml 

...的号召使它使用Perl风格的正则表达式(这是我正在使用)并产生所需的结果。

0
kent$ echo "<phone>null</phone> or <phone></phone>foo bar"|grep -iE "(<phone>null</phone>|<phone></phone>)"        

<phone>null</phone> or <phone></phone>foo bar 
+0

肯特,我明白了,谢谢......但是您的解决方案不使用正则表达式或测试可能出现的空位(代替)空位。不过谢谢。 –