【问题标题】:Having difficulty using regexp in grep在 grep 中使用正则表达式有困难
【发布时间】:2011-10-16 05:01:58
【问题描述】:

我可能遗漏了一些非常明显的东西,但我有一个 xml 文件,我需要使用 grep 来查看它是否包含以下内容:

<phone>null</phone> 或者 <phone></phone>

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

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

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

但是返回空(即使我使用的文件有这个节点)。 我忽略了什么?

TIA

【问题讨论】:

  • 如果您输入的是您所拥有的,那么您的正则表达式应该可以工作。我用 grep 测试了你的正则表达式,它在两种情况下都匹配。
  • 是的...我必须添加 -P,我的服务器不能默认配置为使用 perl regEx...对此了解不足,无法进一步推测。

标签: regex grep


【解决方案1】:

啊!找到了...我会自己回答,以防其他人发现它在将来有用...添加 -P 开关即...

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

...调用使其使用 perl 风格的正则表达式(这是我正在使用的)并产生所需的结果。

【讨论】:

    【解决方案2】:
    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
    

    【讨论】:

    • 肯特,我想通了,谢谢...但是您的解决方案不使用正则表达式或测试(代替)null 周围可能存在的空格。不过还是谢谢。
    猜你喜欢
    • 2012-10-18
    • 1970-01-01
    • 2012-01-16
    • 1970-01-01
    • 2019-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多