理解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/groupn
次是\{n\}
。没有转义,它们只是文字字符串
如果您使用了egrep或grep-EERE
,则扮演该角色。使用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-
}