在grep支架表达的撇号

时间:2016-08-18 16:00:12

标签: bash grep

我在这里回答了一个代码高尔夫问题:
https://codegolf.stackexchange.com/q/89400/57100
我的回答:
https://codegolf.stackexchange.com/a/89421/57100
我得到了一个评论,有一个消化,以改善我的答案,但我无法弄清楚它是如何工作的。

难题是输入和输出源代码中的字符。

建议是:grep -o '[] [|\'\'greposrtu-]|sort -u

我得到-osort -u,第一个]没有关闭括号表达式,但我对grep的其余参数有点困惑。据我所知,第一个'打开字符串,但最后没有一个关闭它。此外,在括号表达式中,第一个\'似乎关闭了字符串(如果我同时取出\' s等待更多输入),还匹配\

以下是其他一些最小的例子:
1. grep -o '[]']匹配]但不匹配'
2. grep -o '[][\']匹配\[],但不匹配'
3. grep -o '[][\'\']匹配'[]\
4. grep -o '[']发出错误:grep: Unmatched [ or [^

关于这些例子的问题:
1.为什么'关闭字符串,但]在它之后并关闭字符串中的括号表达式? 2.为什么\'似乎匹配\
3.为什么第二次\'匹配'而不是第一次匹配\?{ 4.为什么'[]']有效,但'[']没有?

1 个答案:

答案 0 :(得分:2)

在单引号中,\没有特殊含义。因此,grep的参数包含

    单引号中的
  • [][|\
  • \'即单引号
  • grepostru-]作为文字字符,]如果不是grep中的第一个字符,则[...]没有特殊含义,bash没有特殊含义{1}}。