基础正则表达式字符汇
^word----意义:待搜寻的字符串(word)在行首
范例:搜寻行首为#开始的那一行,并列出行号
grep -n '^#' test.txt
word$----意义:待搜寻的字符串(word)在行尾
范例:将行尾为!的那一行打印出来,并列出行号
grep -n '!$' test.txt
. -------意义:代表【一定有一个任意字符】的字符
范例:搜寻的字符串可以是(eve)(eae)(eee)(e e),但不能仅有(ee),即e与e中间一定仅有一个字符,而空格也是字符
grep -n 'e.e' test.txt
\ -------意义:跳脱字符,将特殊符号的特殊意义去除
范例:搜寻含有单引号‘的那一行
grep -n \' test.txt
* -------意义:重复零个到无穷多个的前一个RE字符
范例:找出含有(es)(ess)(esss)等的字符串,注意,因为*可以是0个,所以es也是符合待搜寻字符串。另外,因为*为重复前一个RE字符的符号,因此,在*之前必须要紧接着一个RE字符。例如任意字符为[.*]
grep -n 'ess*' test.txt
[list]------意义:字符集合的RE字符,里面列出想要截取的字符
范例:搜寻含有(gl)或者(gd)的那一行,需要特别留意的是,在【】当中仅代表一个待搜寻的字符,例如a[afl]y代表搜寻的字符串可以是aay,afy,aly,即[afl]代表a或f或l的意思
grep -n 'g[ld]' test.txt
[n1-n2]---意义:字符集合的RE字符,里面列出想要截取的字符范围
范例:搜寻含有任意数字的那一行!特别需留意,在字符集合[]中的减号-是有特殊意义的,他代表两个字符之间的所有连续字符!但这个连续与否与ASCII编码有关,因此,你的编码需要设定正确,例如所有大写字母为[A-Z]
grep -n '[0-9]' test.txt
[^list]------意义:字符集合的RE字符,里面列出不要的字符串范围
范例:搜寻的字符串可以是(oog)(ood)但不能是(oot),那个^在[]内时,代表的意义是反向选择的意思。例如,我不要大写字符,则为[^A-Z]。但是,需要特别注意的是,如果以grep -n [^A-Z] test.txt来搜寻,却发现该档案内的所有行都被列出,为什么?因为这个[^A-Z]是非大写字符的意思,因为每一行都有非大写字符。
grep -n 'oo[^t]' test.txt
\{n,m\}----意义:连续n到m个的前一个RE字符
若为\{n\}则是连续n个的前一个RE字符
若是\{n,\}则是连续n个以上的前一个RE字符
范例:在g与g之间有2个到3个o的存在的字符串,亦(goog)(goooog)
grep -n 'go\{2,3\}g' test.txt
扩展型正则表达式几个特殊常用符号:
+ ----意义:重复一个或一个以上的前一个RE字符
范例:搜寻(god)(good)(goood)....等等的字符串。那个o+代表一个以上的o。
egrep -n 'go+d' test.txt
? ----意义:零个或一个的前一个RE字符
范例:搜寻(gd)(god)这两个字符串。那个o?代表空的或者1个o
egrep -n 'go?d' test.txt
| ----意义:用或(or)的方式找出数个字符串
范例:搜寻gd或good这两个字符串
egrep -n 'gd|good' test.txt
egrep -n 'gd|good|dog' test.txt
() ---意义:找出群组字符串
范例:搜寻(glad)或者(good)这两个字符串,因为g与d是重复的,所以,我就可以将la与oo列于()当中,并以|来分隔开来
egrep -n 'g(la|oo)d' test.txt
()+ --意义:多个重复群组的判别
范例:将AxyzxyzxyzxyzC用echo叫出,然后再使用如下方法搜寻
egrep 'A(xyz)+C' test.txt
上面的例子意思是说,我要找开头是A结尾是C,中间有一个以上的“xyz”字符串的意思。
注意:!在正则表达式中并不是特殊字符。