【问题标题】:Escaping metacharacters using grep on cygwin在 cygwin 上使用 grep 转义元字符
【发布时间】:2016-08-26 21:19:57
【问题描述】:

在 cygwin 上使用 grep 搜索“employee_id”,条件如下:

  • 前面没有下划线
  • 紧跟在空格、右括号或句点之后

下面的表达式在 Regex Builder 2.05 中使用文本示例工作,但在 grep 中使用时不返回结果:

grep -E -r '[^_]employee_id[ \]\.]' ./*

我不确定这是否是通过命令行输入表达式的一些特殊性,或者它是否与许多正则表达式“方言”之间的差异有关,但我没有遇到任何其他转义字符的方法我正在寻找答案。

有人可以提供正确的 grep 语法来返回我正在寻找的结果吗?

【问题讨论】:

    标签: regex grep escaping cygwin


    【解决方案1】:

    你可以使用:

    grep -E -r '(^|[^_])employee_id[] .]' .
    
    • (^|[^_]) as employee_id 可以在行首或前面有任何非下划线字符。

    • 无需在字符类中转义 DOT 或 ]。但请记住,关闭]必须紧跟打开[

    【讨论】:

    • 感谢您的快速回复。很好地抓住了第一点,我没想过不需要逃避这个点,但这是有道理的。不幸的是,您的解决方案也没有返回任何结果,尽管我知道有匹配项。
    • 我实际上已经在您发表评论之前对其进行了更新。使用grep -E -r '(^|[^_])employee_id[] .]' .
    • 非常有趣!我以前想知道我是否没有逃脱封闭括号,如果它会发现有另一个封闭的括号包围了字符类,但它没有用。我现在看到封闭括号必须立即跟随开放括号,我没有想到这一点。感谢您的帮助!
    猜你喜欢
    • 2011-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-15
    相关资源
    最近更新 更多