linux命令之grep (2)

此时,就只剩下第 12 行,因为只有第 12 行的行首是 the 开头啊~此外, 如果我想要开头
是小写字节的那一行就列出呢?可以这样:

[root@onajax.com ~]# grep -n '^[a-z]' onajax.com.txt 2:apple is my favorite food. 4:this dress doesn't fit me. 10:motorcycle is cheap than car. 12:the symbol '*' is represented as start. 18:google is the best tools for search keyword. 19:goooooogle yes! 20:go! go! Let's go.

如果我不想要开头是英文字母,则可以是这样:

[root@onajax.com ~]# grep -n '^[^a-zA-Z]' onajax.com.txt 1:"Open Source" is a good mechanism to develop programs. 21:# I am VBird

^ 符号,在字符类符号(括号[])之内与之外是不同的! 在 [] 内代表『反向选择』,在 [] 之外则代表定位在行首的意义!
那如果我想要找出来,行尾结束为小数点 (.) 的那一行:

[root@onajax.com ~]# grep -n '\.$' onajax.com.txt 1:"Open Source" is a good mechanism to develop programs. 2:apple is my favorite food. 3:Football game is not use feet only. 4:this dress doesn't fit me. 10:motorcycle is cheap than car. 11:This window is clear. 12:the symbol '*' is represented as start. 15:You are the best is mean you are the no. 1. 16:The world <Happy> is the same with "glad". 17:I like dog. 18:google is the best tools for search keyword.

特别注意到,因为小数点具有其他意义(底下会介绍),所以必须要使用转义字符()来加以解除其特殊意义!

空白行: [root@onajax.com ~]# grep -n '^$' onajax.com.txt 22:

因为只有行首跟行尾 (^$),所以,这样就可以找出空白行啦!

任意一个字节 . 与重复字节 *
这两个符号在正则表达式的意义如下: . (小数点):代表『一定有一个任意字节』的意思; * (星号):代表『重复前一个字符, 0 到无穷多次』的意思,为组合形态

假设我需要找出 g??d 的字串,亦即共有四个字节, 起头是 g 而结束是 d ,我可以这样做:

[root@onajax.com ~]# grep -n 'g..d' onajax.com.txt 1:"Open Source" is a good mechanism to develop programs. 9:Oh! The soup taste good. 16:The world <Happy> is the same with "glad".

因为强调 g 与 d 之间一定要存在两个字节,因此,第 13 行的 god 与第 14 行的 gd 就不
会被列出来啦!

如果我想要列出有 oo, ooo, oooo 等等的数据, 也就是说,至少要有两个(含) o 以上,该如
何是好?

因为 * 代表的是『重复 0 个或多个前面的 RE 字符』的意义, 因此,『o』代表的是:『拥
有空字节或一个 o 以上的字节』,因此,『 grep -n 'o' onajax.com.txt 』将会把所
有的数据都列印出来终端上!
当我们需要『至少两个 o 以上的字串』时,就需要 ooo* ,亦即是:

[root@onajax.com ~]# grep -n 'ooo*' onajax.com.txt 1:"Open Source" is a good mechanism to develop programs. 2:apple is my favorite food. 3:Football game is not use feet only. 9:Oh! The soup taste good. 18:google is the best tools for search keyword. 19:goooooogle yes!

如果我想要字串开头与结尾都是 g,但是两个 g 之间仅能存在至少一个 o ,亦即是 gog,
goog, gooog.... 等等,那该如何?

[root@onajax.com ~]# grep -n 'goo*g' onajax.com.txt 18:google is the best tools for search keyword. 19:goooooogle yes!

如果我想要找出 g 开头与 g 结尾的行,当中的字符可有可无

[root@onajax.com ~]# grep -n 'g.*g' onajax.com.txt 1:"Open Source" is a good mechanism to develop programs. 14:The gd software is a library for drafting programs. 18:google is the best tools for search keyword. 19:goooooogle yes! 20:go! go! Let's go.

因为是代表 g 开头与 g 结尾,中间任意字节均可接受,所以,第 1, 14, 20 行是可接受的喔!
这个 .* 的 RE 表示任意字符是很常见的.
如果我想要找出『任意数字』的行?因为仅有数字,所以就成为:

[root@onajax.com ~]# grep -n '[0-9][0-9]*' onajax.com.txt 5:However, this dress is about $ 3183 dollars. 15:You are the best is mean you are the no. 1. 限定连续 RE 字符范围 {}

我们可以利用 . 与 RE 字符及 * 来配置 0 个到无限多个重复字节, 那如果我想要限制一个范围区间内的重复字节数呢?
举例来说,我想要找出两个到五个 o 的连续字串,该如何作?这时候就得要使用到限定范围的字符 {} 了。

但因为 { 与 } 的符号在 shell 是有特殊意义的,因此, 我们必须要使用字符  来让他失去特殊意义才行。 至於 {} 的语法是这样的,假设我要找到两个 o 的字串,

[root@onajax.com ~]# grep -n 'o\{2\}' onajax.com.txt 1:"Open Source" is a good mechanism to develop programs. 2:apple is my favorite food. 3:Football game is not use feet only. 9:Oh! The soup taste good. 18:google is the best tools for search ke 19:goooooogle yes!

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpjyjp.html