第1章 扩展正则表达式

1.1 + 前一个字符连续出现了1次或1次以上

  1. egrep "0+" clsn.txt 1次或1次以上 >=1
  2. egrep "0*" clsn.txt 0次或0次以上 >=0

1.1.1 找到文本中的0

  1. [root@znix ~]# egrep "0+" clsn.txt
  2. my qq num is 49000448.
  3. not 4900000448.
  4. [root@znix ~]# egrep -o "0+" clsn.txt
  5. 000
  6. 00000

1.1.2 取出文件中的大写字母

  1. [root@znix ~]# grep -o "[A-Z]" clsn.txt
  2. I
  3. I
  4. I
  5. O
  6. L
  7. D
  8. B
  9. O
  10. Y

1.1.3 取出连续出现的大写字母

  1. [root@znix ~]# egrep -o "[A-Z]+" clsn.txt
  2. I
  3. I
  4. I
  5. clsn

1.1.4 显示所有的单词

  1. [root@znix ~]# egrep -o "[A-Za-z]+" clsn.txt
  2. I
  3. am
  4. clsn
  5. teacher

1.2 | 或者

表示找其中的一个或者是另外一个。

  1. [root@znix ~]# egrep "clsn|oldbey" clsn.txt -o
  2. clsn
  3. clsn
  4. oldbey

找/etc/services 中的两个端口

  1. [root@znix ~]# egrep "3306|1521" /etc/services
  2. mysql 3306/tcp # MySQL
  3. mysql 3306/udp # MySQL
  4. ncube-lm 1521/tcp # nCube License Manager
  5. ncube-lm 1521/udp # nCube License Manager

找其中的A或者B或者C。

  1. [root@znix ~]# egrep "A|B|C" clsn.txt
  2. my god ,i am not oldbey,but clsn!

找到12或者56替换成空。

  1. [root@znix ~]# echo 123456|sed -r 's#12|56##g'
  2. 34

1.3 () 小括号 反向引用

小括号里面的内容是一个整体,相当于是一个字符

1.3.1 表示一个整体

  1. [root@znix ~]# egrep "oldb(o|e)y" clsn.txt
  2. I am clsn teacher!
  3. my blog is http://clsn.blog.51cto.com
  4. my god ,i am not oldbey,but clsn!

1.3.2 反向引用

sed -r 使用扩展正则

  1. [root@znix ~]# echo 123456|sed -r 's#..(..)..#\1#g'
  2. 34

点表示任意一个字符,\2表示第二个括号。

  1. [root@znix ~]# echo 123456|sed -r 's#(.).(..).(.)#\2#g'
  2. 34

1.4 {} 大括号(花括号)

0{n,m} 数字0连续出现了至少n次,最多m次

  1. [root@znix ~]# egrep "[a-z]{3,6}" clsn.txt
  2. I am clsn teacher!
  3. I teach linux.
  4. I like badminton ball ,billiard ball and chinese chess!
  5. my blog is http://clsn.blog.51cto.com
  6. our site is http://www.etiantian.org
  7. my qq num is 49000448.
  8. not 4900000448.
  9. my god ,i am not oldbey,but clsn!
  1. [root@znix ~]# egrep "[a-zA-Z]{3,6}" clsn.txt
  2. I am clsn teacher!
  3. I teach linux.
  4. I like badminton ball ,billiard ball and chinese chess!
  5. my blog is http://clsn.blog.51cto.com
  6. our site is http://www.etiantian.org
  7. my qq num is 49000448.
  8. not 4900000448.
  9. my god ,i am not oldbey,but clsn!
  10. [root@znix ~]#

1.4.1 大括号的不同方法

  1. 0{3,6} >=3 <=6
  2. 0{3} ==3
  3. 0{3,} >=3
  4. 0{,6} >=0 <=6

1.5 ?

前一个字符连续出现了 0次或1次

1.5.1 环境

  1. [root@znix ~]# cat a.log
  2. good
  3. gd
  4. god
  5. goood

1.5.2 o连续出现0次或1次

  1. [root@znix ~]# egrep "gd|god" a.log
  2. gd
  3. god
  4. [root@znix ~]# egrep "go?d" a.log
  5. gd
  6. god

1.6 正则表达式分类

1.6.1 基础正则

^ 以……开头 $ 以……结尾 ^$ 空行 .* 所有 [abc] 表示abc [a-z] 表示a到z [A-Z] 表示A-Z [^abc] 表示排除abc

1.6.2 扩展正则表达式

  • 连续出现 1次或1次以上 | 或者 () 小括号里面的内容是一个整体,相当于是一个字符 {} 0{n,m} 数字0连续出现了至少n次,最多m次 ? 前一个字符连续出现了 0次或1次

第2章 取出eth0网卡的ip地址

2.1 思路

1)先定位 取出第二行
2)取出ip地址

2.1.1 看eth0的内容

  1. [root@znix ~]# ifconfig eth0
  2. eth0 Link encap:Ethernet HWaddr 00:0C:29:A8:E4:14
  3. inet addr:10.0.0.201 Bcast:10.0.0.255 Mask:255.255.255.0
  4. inet6 addr: fe80::20c:29ff:fea8:e414/64 Scope:Link
  5. UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
  6. RX packets:86884 errors:0 dropped:0 overruns:0 frame:0
  7. TX packets:74978 errors:0 dropped:0 overruns:0 carrier:0
  8. collisions:0 txqueuelen:1000
  9. RX bytes:14324203 (13.6 MiB) TX bytes:26220378 (25.0 MiB)

2.2 方法一 sed 去头去尾

用sed命令,将其中不需要显示的,逐步替换。

  1. [root@znix ~]# ifconfig eth0|sed -n '2p'|sed 's#^.*dr:##g'|sed 's# .*$##g'
  2. 10.0.0.201

2.3 方法二sed 反向引用

反向替换,使用()把ip地址保护起来,\1方向选择,显示出来ip。

  1. [root@znix ~]# ifconfig eth0|sed -nr '2s#^.*dr:(.*) Bc.*$#\1#gp'
  2. 10.0.0.201

简写👆

  1. [root@znix ~]# ifconfig eth0|sed -n '2p'|sed -r 's#^.*dr:(.*)Bc.*$#\1#g'
  2. 10.0.0.201

2.4 方法三

使用把[^0-9.]之外的替换成空格,使用awk取出第一列。

  1. [root@znix ~]# ifconfig eth0|sed -n '2s#[^0-9.]# #gp'|awk '{print $1}'
  2. 10.0.0.201

2.5 方法四

awk 指定分隔符,将空格和分号都定为分隔符,然后取列。

  1. [root@znix ~]# ifconfig eth0|sed -n '2p'|awk -F "[ :]+" '{print $4}'
  2. 10.0.0.201

第3章 第三关练习题

3.1 如何取得/etiantian文件的权限对应的数字内容,如-rw-r—r—为644,要求使用命令取得644 这样的数字。

3.1.1 方法一 反向引用

使用反向引用,保护要取出的内容。

  1. [root@znix ~]# stat /etc/services |sed -nr '4s#^.*\(0(.*)/-.*$#\1#gp'
  2. 644

3.1.2 方法二 掐头去尾

两个sed 将不需要的东西替换为空。

  1. [root@znix ~]# stat /etc/hosts |sed -n '4s#^.*(0##gp'|sed 's#/.*$##g'
  2. 644

3.1.3 方法三 排除

[^0-7] 除了0到7以外的替换成空格

  1. [root@znix ~]# stat /etc/hosts |sed -n '4s#[^0-7]##gp'
  2. 064400
  3. [root@znix ~]# stat /etc/hosts|sed -nr '4s#[^0-7]+# #gp'
  4. 0644 0 0

第4章 特殊符号、通配符

4.1 特殊符号

  1. && 并且 前面的执行对了执行后面
  2. || 或者 前面命令执行失败了再执行后面的
  3. >> 追加输出重定向
  4. > 标准输出重定向
  5. / 路径的分隔符
  6. $ 取变量的内容
  7. . 当前目录
  8. .. 当前目录的上一级目录
  9. ~ 家目录
  10. | 管道
  11. ! 取反 find awk
  12. # 注释

4.2 通配符

  1. * {} 找出文件

4.3 正则表达式(三剑客grep sed awk使用)

  1. ^
  2. $
  3. ^$
  4. .*
  5. [abc] 一个整体 abc
  6. 正则表达式认为只要是在中括号里面的就是一样的.
  7. [^abc] abc之外