理解grep中的大括号

理解grep中的大括号,grep,Grep,我正在读卡梅隆·纽厄姆的《学习狂欢节》。在那本书中有以下几行代码 ` ` 我试图理解{}在这里的意义{42}。我看到反斜杠脱离了大括号,但我发现很难理解大括号在这个正则表达式中扮演什么角色 在正则表达式中,表达式后面包含数字的大括号表示重复。在此正则表达式中,\{42\}表示匹配任何字符的42,在正则表达式中,{n}表示“匹配上一个字符的n”。在本例中,扩展名为“^:在字符串的开头,:匹配任何字符,{42}42次,$date:后跟此文本(即$date,即$1,即传递到lsd)中的内容).我猜是\

我正在读卡梅隆·纽厄姆的《学习狂欢节》。在那本书中有以下几行代码 `

`
我试图理解{}在这里的意义{42}。我看到反斜杠脱离了大括号,但我发现很难理解大括号在这个正则表达式中扮演什么角色

在正则表达式中,表达式后面包含数字的大括号表示重复。在此正则表达式中,
\{42\}
表示匹配任何字符的42,

在正则表达式中,
{n}
表示“匹配上一个字符的
n
”。在本例中,扩展名为“
^
:在字符串的开头,
:匹配任何字符,
{42}
42次,
$date
:后跟此文本(即
$date
,即
$1
,即传递到
lsd
)中的内容).

我猜是
\
->逃跑把你弄糊涂了

首先,有不同的遵从性,主要是:BRE(b:Basic)、ERE(E:Extended)和PCRE(PC:Perl兼容)

对于工具grep,默认情况下它使用
BRE
,这意味着,对于那些具有特殊含义的字符,如
(,),{,}…
,您必须将其转义为赋予它们特殊含义。在您的示例中,重复前面的char/group
n
次是
\{n\}
。没有转义,它们只是文字字符串

如果您使用了egrep或grep-E
ERE
,则扮演该角色。使用ERE,我们将那些具有特殊意义的字符转义为剥夺它们的特殊意义,这意味着
\{42\}
使用
ERE
意味着文字字符串
“{42}”


一些grep实现有选项
-p
来支持
PCRE
,就转义而言,
PCRE
ERE

{n}
不限于重复字符。这意味着对组和表达式的其他部分进行重复。谢谢各位,有没有什么特别的网站可以让我学习正则表达式,或者我希望java正则表达式就足够了。我是一名java程序员,在那里学习过正则表达式。我从经验中了解到,Javascript和Java的正则表达式构造方式略有不同,我想知道Unix的情况是否如此,如果是,那么学习它们的最佳场所是什么。欢迎提出任何建议。
function lsd
{
    date=$1
    ls -l | grep -i "^.\{42\}$date" | cut -c55-
}