【问题标题】:in grep, why does it need to escape [ while not for ]在 grep 中,为什么它需要转义 [ 而不是 for ]
【发布时间】:2012-07-19 21:10:30
【问题描述】:

文件data中有一行,如

[总体],....

当使用grep获取这一行时,我发现这只能通过

grep "\[overall]" 数据

只是出于好奇,为什么它需要逃避[ 而不是]

编辑:这是在 ubuntu 12.04 上测试的

【问题讨论】:

    标签: bash shell command-line grep


    【解决方案1】:

    因为]只有在它前面已经有一个未被转义的[时才具有任何特殊含义。

    你可以通过以下方式获得乐趣(如果你有正确的、有点扭曲的心态):

    grep '[][-]' ...
    

    这会搜索][-。你必须小心] 的位置;它必须在角色类的开头。您必须小心- 的位置;它必须在课程开始或结束时进行。并且否定类的插入符号必须先出现。

    grep '[^][-]' ...
    

    【讨论】:

    • +1 无偿建议极客娱乐活动... ;-P
    【解决方案2】:

    我猜如果没有开头 [ 来指定字符类,则结尾 ] 没有任何意义。因此,一旦您转义了左括号,就不需要转义结束括号。

    【讨论】:

      【解决方案3】:

      我赞同 Derek 和 Jonathan 的回答。一年来,我发现自己使用 fgrep 的次数比使用 grep 的次数要多。 fgrepgrep -Fgrep --fixed-strings 相同,其中搜索词只是一个字符串,而不是正则表达式。比如我要搜索[overall]

      fgrep "[overall]" file
      

      【讨论】:

        猜你喜欢
        • 2021-07-06
        • 2015-02-10
        • 2017-08-19
        • 1970-01-01
        • 1970-01-01
        • 2011-08-16
        • 2018-03-18
        • 1970-01-01
        • 2010-12-08
        相关资源
        最近更新 更多