linux初级学习笔记十:linux grep及正则表达式!(视频序号:04_4)

本节学习的命令:grep

本节学习的技能:

      grep对文本的匹配

      正则表达式的使用

 

知识点十:grep及正则表达式(4_4)

grep,egrep,fgrep:

  grep: 根据模式搜索文本,并将符合模式的文本行显示出来。

  Pattern(模式): 文本字符和正则表达式的元字符组合而成匹配条件

语法定义: 
  grep [options] PATTERN [FILE...]
    -i:表示忽略大小写     --color:把匹配到的值显示颜色     -v: 显示没有被模式匹配到的行     -o:只显示被模式匹配到的字符串
文件名通配, globbing(回顾)

  *: 任意长度的任意字符

  ?:任意单个字符

[]:匹配指定范围内的任意单个字符
[^]: 匹配指定范围之外的任意单个字符
1 grep 'root' /etc/passwd  --只显示/etc/passwd文件中符合查找‘root’的行
2 
3 grep --color 'root' /etc/passwd
4 
5 alias grep='grep --color'
6 grep 'root' /etc/passwd 
7 
8 grep -v 'root' /etc/passwd
9 grep -o 'root' /etc/passwd
grep命令测试

 

正则表达式(REGular EXPression, REGEXP):

  元字符:

    .    : 匹配任意单个字符

    []   :匹配指定范围内的任意单个字符

    [^]  :匹配指定范围外的任意单个字符

        字符集合:[:digit:], [:lower:], [:upper:], [:punct:], [:space:], [:alpha:], [:alnum:]

 

    匹配次数(贪婪模式)

      *  : 匹配其前面的字符任意次

          数据:a, b, ab, aab, acb, adb, amnb

          匹配结果:a*b:b,ab,aab,acb,adb,amnb

             a\?b:b,ab,aab,acb,adb,amnb

               a.*b:ab,aab,acb,adb,amnb

      .*  : 任意长度的任意字符

      \?  : 匹配其前面的字符1次或0次

      \{m,n\}  :匹配其前面的字符至少m次,至多n次

        \{1,\}:匹配前面的字符至少1次

                \{0,3\}:匹配前面的字符1到3次

    位置锚定:

      ^  : 锚定行首,此字符后面的任意内容必须出现在行首

      $  : 锚定行尾,此字符前面的任意内容必须出现在行尾

      ^$  : 空白行

      \<或\b  : 锚定词首,其后面的任意字符必须作为单词首部出现

      \>或\b  : 锚定词尾,其前面的任意字符必须作为单词的尾部出现

 

    分组:

      \(\)

      后向引用

        \1: 引用第一个左括号以及与之对应的右括号所包括的所有内容

        \2:

        \3:

 

 1 --正则表达式
 2 grep 'r..t' /etc/passwd
 3 
 4 vi a.txt 
 5 数据 
 6     a
 7     b
 8     ab
 9     aab
10     acb
11     adb
12     amnb
13     
14 grep 'a*b' a.txt
15 grep 'a.*b' a.txt
16 grep 'a\?b' a.txt
17 
18 grep 'a\{1,3\}b' a.txt
19 
20 grep '^r..t' /etc/passwd
21 grep 'w$' /etc/inittab
22 grep 'b..h$' /etc/passwd
23 grep '^$' /etc/inittab
24 
25 grep '[[:digit:]]$' /etc/inittab
26 grep '[[:space:]][[:digit:]]$' /etc/inittab
27 
28 vi test2.txt 
29 数据:
30     This is root.
31     The user is mroot.
32     rooter is a dog's name.
33     chroot is a command.
34     mrooter is not a word.
35     
36 grep 'root\>' test2.txt
37 grep '\<root' test2.txt
38 grep '\<root\>' test2.txt
39 
40 grep '\(ab\)*' a.txt
41 
42 vi test3.txt
43 数据:
44     He love his lover.
45     She like her liker.
46     He like his lover.
47 
48 grep 'l..e' test3.txt
49 grep 'l..e.*l..e' test3.txt
50 grep '\(l..e\).*\1' test3.txt
51 
52 grep '\([0-9]\).*\1$' /etc/inittab
正则表达式测试

 

 

课后作业:

 1 练习:
 2 1、显示/proc/meminfo文件中以不区分大小的s开头的行;
 3 grep -i '^s' /proc/meminfo
 4 grep '^[sS]' /proc/meminfo
 5 2、显示/etc/passwd中以nologin结尾的行; 
 6 grep 'nologin$' /etc/passwd
 7 
 8 取出默认shell为/sbin/nologin的用户列表
 9 grep "nologin$' /etc/passwd | cut -d: -f1
10 
11 取出默认shell为bash,且其用户ID号最小的用户的用户名
12 grep 'bash$' /etc/passwd | sort -n -t: -k3 | head -1 | cut -d: -f1
13 
14 3、显示/etc/inittab中以#开头,且后面跟一个或多个空白字符,而后又跟了任意非空白字符的行;
15 grep "^#[[:space:]]\{1,\}[^[:space:]]" /etc/inittab
16 
17 4、显示/etc/inittab中包含了:一个数字:(即两个冒号中间一个数字)的行;
18 grep ':[0-9]:' /etc/inittab
19 
20 5、显示/boot/grub/grub.conf文件中以一个或多个空白字符开头的行;
21 grep '^[[:space:]]\{1,\}' /boot/grub/grub.conf
22 
23 6、显示/etc/inittab文件中以一个数字开头并以一个与开头数字相同的数字结尾的行;
24 grep '^\([0-9]\).*\1$' /etc/inittab
25 
26 练习:
27 1、找出某文件中的,1位数,或2位数;
28 grep '[0-9]\{1,2\}' /proc/cpuinfo
29 grep --color '\<[0-9]\{1,2\}\>' /proc/cpuinfo
30 
31 2、找出ifconfig命令结果中的1-255之间的整数;
32 
33   
34 3、查找当前系统上名字为student(必须出现在行首)的用户的帐号的相关信息, 文件为/etc/passwd
35 grep '^student\>' /etc/passwd | cut -d: -f3
36 id -u student
37 
38 student1
39 student2
40 
41 练习:分析/etc/inittab文件中如下文本中前两行的特征(每一行中出现在数字必须相同),请写出可以精确找到类似两行的模式:
42 l1:1:wait:/etc/rc.d/rc 1
43 l3:3:wait:/etc/rc.d/rc 3
44 
45 grep '^l\([0-9]\):\1.*\1$' /etc/inittab
课后练习

 

posted @ 2018-05-15 22:04  达尔文在思考  阅读(206)  评论(0编辑  收藏  举报