我正在阅读Cameron NewHam的“学习打击”。在那本书中有以下几行代码 `
function lsd
{
date=$1
ls -l | grep -i "^.\{42\}$date" | cut -c55-
}
` 我试图在{42}了解{}的重要性。我看到反斜杠正在逃避支撑,但我发现很难理解括号在这个正则表达式中起什么作用。
答案 0 :(得分:0)
在正则表达式中,表达式后面包含数字的大括号表示重复。在此正则表达式中,.\{42\}
表示匹配任何字符.
中的42个。
答案 1 :(得分:0)
在正则表达式中,{n}
表示"匹配前一个字符"的n
。在这种情况下,扩展为" ^
:在字符串的开头,.
:匹配任何字符,{42}
42次,$date
:后跟此文字($date
,即$1
,即您传入lsd
)"。
答案 2 :(得分:0)
我想让你困惑的是\
- >逃逸。
首先有不同的合规性,主要是:BRE(b:基本),ERE(E:扩展)和PCRE(PC:Perl兼容)
对于工具grep,默认使用BRE
,这意味着,对于那些具有特殊含义的字符,例如(, ), |, {, }...
,您必须将它们转义为赋予它们的特殊含义。在您的示例中为\{n\}
,重复上一个字符/组n
次。没有逃避它们,它们只是文字字符串。
如果您使用egrep or grep -E
ERE
,则扮演角色。通过ERE,我们可以逃避那些具有特殊含义的字符剥夺特殊含义,这意味着\{42\}
ERE
意味着文字字符串"{42}"
。
某些grep实现具有选项-P
来支持PCRE
,就转义而言,PCRE
与ERE
相同