- 论坛徽章:
- 0
|
延伸正规表示法
一般读者只要了解基础型的正规表示法大概就已经相当足够了,不过,某些时刻为了要简化整个命令操作, 了解一下使用范围更广的延伸型正规表示法的表示式会更方便呢!
我们要去除空白行与行首为 # 的行列,使用的是
grep -v '^$' regular_express.txt | grep -v'^#'
如果使用延伸型的正规表示法,我们可以简化为:
egrep -v '^$|^#'regular_express.txt【那个在单引号内的管线意义为『或 or』啦】
如果要使用延伸型正规表示法,你可以使用 grep -E , 不过更建议直接使用 egrep !直接区分命令比较好记忆!其实 egrep 与 grep -E是类似命令别名的关系啦!
RE 字符 意义与范例
+ 意义:重复『一个或一个以上』的前一个 RE 字符
范例:搜寻 (god) (good) (goood)... 等等的字串。 那个 o+ 代表『一个以上的 o 』
egrep -n 'go+d' regular_express.txt
? 意义:『零个或一个』的前一个 RE 字符
范例:搜寻 (gd) (god) 这两个字串。 那个 o? 代表『空的或 1 个 o 』;有没有发现到,这两个案例( 'go+d' 与 'go?d' )的结果集合与 'go*d' 相同?
egrep -n 'go?d' regular_express.txt
| 意义:用或( or )的方式找出数个字串
范例:搜寻 gd 或 good 这两个字串,注意,是『或』!
egrep -n 'gd|good' regular_express.txt
egrep -n 'gd|good|dog' regular_express.txt
() 意义:找出『群组』字串
范例:搜寻 (glad) 或 (good) 这两个字串,因为 g 与 d 是重复的
egrep -n 'g(la|oo)d' regular_express.txt
()+ 意义:多个重复群组的判别
范例:将『AxyzxyzxyzxyzC』用 echo 叫出,然后再使用如下的方法搜寻一下!
echo 'AxyzxyzxyzxyzC' | egrep 'A(xyz)+C'
以上这些就是延伸型的正规表示法的特殊字节。另外,要特别强调的是,那个 ! 在正规表示法当中并不是特殊字节, 所以,如果你想要查出来文件中含有 ! 与 > 的字行时,可以这样:
[root@sor-sys zy]# grep -n '[!>]' regular_express.txt
2:goooooogle yes!
6 h, my god!!!
8:Oh! The soup taste good.
12:The world <Happy> is the same with "glad".
常常看到有陷阱的题目写:『反向选择这样对否? '[!a-z]'?』
呵呵!是错的呦~要 '[^a-z] 才是对的!
|
|