特殊符号:
引号
重定向符号
位置
判断
其他符号
通配符 VS 正则表达式
通配符:找出文件名 大部分命令可以使用
正则: 精确的过滤 三剑客使用
正则表达式
基础正则
^
$
*
.*
1.1 找出oldboy.txt中以m或n开头的行
[[email protected] oldboy]# grep "^[mn]" oldboy.txt
my blog is http://oldboy.blog.51cto.com
my qq is 49000448
not 4900000448.
my god,i am not oldbey,but OLDBOY!
1.2 找出oldboy.txt中以m或n开头并且以m或n结尾的行
[[email protected] /oldboy]# grep '^[mn]' oldboy.txt
my blog is http://oldboy.blog.51cto.com
my qq is 49000448
not 4900000448.
my god,but OLDBOY!
[[email protected] /oldboy]# grep '^[mn]' oldboy.txt|grep '[mn] $'
my blog is http://oldboy.blog.51cto.com
[[email protected] /oldboy]# grep '^[mn].*[mn]$' oldboy.txt
my blog is http://oldboy.blog.51cto.com
第2章 第9个符号- [^] [^abc]
相当于是一个符号(每次匹配1个字符)
2.1 找出除了a或除了b或除了c
[[email protected] /oldboy]# grep '[^abc]' oldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our size is http://blog.oldboyedu.com
my qq is 49000448
not 4900000448.
my god,but OLDBOY!
2.2 #排除文件中的数字和大小写字母
[[email protected] /oldboy]# grep '[0-Z]' oldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball,but OLDBOY!
小结:
^ 以...开头的行
$ 以...结尾的行
^$ 空行
. 任意一个字符
* 0个或多个
.* 所有
[] [abc]
[^] [^abc]
() 小括号
[] 中括号
{} 大括号 花括号
扩展正则 (ERE Extented Regular Expression)
第3章 第10个符号- +
3.1 + 前一个字符连续出现1次或1次以上
0连续出现
[[email protected] /oldboy]# egrep '0+' oldboy.txt
my qq is 49000448
not 4900000448.
[[email protected] /oldboy]# grep -E '0+' oldboy.txt
my qq is 49000448
not 4900000448.
[[email protected] /oldboy]# grep '0\+' oldboy.txt
my qq is 49000448
not 4900000448.
有加号和没有加号的区别:
(-o显示过程)
[[email protected] /oldboy]# egrep '0+' oldboy.txt –o (一次多个)
000
00000
[[email protected] /oldboy]# egrep '0' oldboy.txt -o
0
0
0
0
0
0
0
0
3.1.1 #取出连续出现的小写字母
[[email protected] /oldboy]# egrep '[a-z]+' oldboy.txt
查看过程:
第4章 第11个符号- | 或者
4.1 找oldboy或linux
[[email protected] /oldboy]# egrep 'oldboy|linux' oldboy.txt
I am oldboy teacher!
I teach linux.
my blog is http://oldboy.blog.51cto.com
our size is http://blog.oldboyedu.com
4.2 #先备份 /etc/ssh/sshd_config 然后 排除 文件中的#号的行或空行
备份: [[email protected] oldboy]# cp /etc/ssh/sshd_config{,.bak}
排除:
[[email protected] /oldboy]# egrep -v '^$|#' /etc/ssh/sshd_config
Protocol 2
SyslogFacility AUTHPRIV
PasswordAuthentication yes
ChallengeResponseAuthentication no
GSSAPIAuthentication yes
GSSAPICleanupCredentials yes
UsePAM yes
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
X11Forwarding yes
Subsystem sftp /usr/libexec/openssh/sftp-server
第5章 正则表达式-坑3- [^#^$] [^$] [^#$]
[]中 $ . 没有特殊含义
编辑一些符号,然后查看
[[email protected] /oldboy]# cat oldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our size is http://blog.oldboyedu.com
my qq is 49000448
not 4900000448.
my god,but OLDBOY!
+++++\\\\\\!!!!$$$$$$^^^
####!!!^^^^^[email protected]@@@@####
[[email protected] /oldboy]# grep '[^#^$]' oldboy.txt(执行这条命令相当于是排除# ^ $ 三个符号)
I am oldboy teacher!
I teach linux.
I like badminton ball,billiard ball and chinese chess!
my blog is http://oldboy.blog.51 cto.com
our size is http://blog.oldboyedu.com
my qq is 49000448
not 4900000448.
my god,but OLDBOY!
+++++\\\\\\!!!!$$$$$$^^^
####!!!^^^^^[email protected]@@@@####
[[email protected] /oldboy]# grep '\.$' oldboy.txt
I teach linux.
not 4900000448.
[[email protected] /oldboy]# grep '[.]$' oldboy.txt
I teach linux.
not 4900000448.
第6章 正则表达式-坑4- [^abc] vs grep -v
[^a-z] 排除按字符 某个字符 某些字符
grep -v [a-z] 排除按行
6.1 排除a-z的小写字母
[[email protected] /oldboy]# grep '[^a-z]' oldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball,but OLDBOY!
+++++\\\\\\!!!!$$$$$$^^^
####!!!^^^^^[email protected]@@@@####
6.2 排除含有a-z的行
[[email protected] /oldboy]# grep -v '[a-z]' oldboy.txt
+++++\\\\\\!!!!$$$$$$^^^
####!!!^^^^^[email protected]@@@@####
6.3 第12个符号- () 表示一个整体 反向引用/后向引用
6.3.1 找出oldboy或oldbey
找共同点:
只差o和e两个字母,将它们作为一个整体 先保护起来,然后使用
[[email protected] /oldboy]# egrep 'oldb(o|e)y' oldboy.txt
I am oldboy teacher!
my blog is http://oldboy.blog.51cto.com
our size is http://blog.oldboyedu.com
my god,but OLDBOY!
反向引用/后向引用
思路:把你想要的内容保护起来 ()
6.4 sed 在 's###g' 后两个井号之间使用 \数字 引用
[[email protected] /oldboy]# echo 123456
123456
[[email protected] /oldboy]# echo '<123456>'
<123456>
[[email protected] /oldboy]# echo 123456
123456
[[email protected] /oldboy]# echo '<123456>'
<123456>
[[email protected] /oldboy]# echo 123456|sed -r 's#(.*)#\1#g'
123456
[[email protected] /oldboy]# echo 123456|sed -r 's#(.*)#<\1>#g'
<123456> (将所有数字作为一个整体,在它们前后加上<>)
echo 123456
12<34>56
[[email protected] /oldboy]# echo 123456|sed -r 's#(34)#<\1>#g'
12<34>56 (将34作为一个整体,在它们前后加上<>)
[[email protected] /oldboy]# echo 123456|sed -r 's#(..)(..)(..)#\3#g'
56
[[email protected] /oldboy]# echo 123456|sed -r 's#(..)(..)(..)#\3\2#g'
5634
[[email protected] /oldboy]# echo 123456|sed -r 's#(..)(..)(..)#\3\2\1#g'
563412
[[email protected] /oldboy]# echo 123456|sed -r 's#(..)(..)(..)#\3<\2\1#g'
[[email protected] /oldboy]# echo 123456|sed -r 's#(..)(..)(..)#\3<\2>\1#g'
56<34>12
第13个符号 { } 0{n,m} 前一个字符至少连续出现了n次,最多连续出现m次
a{n,m}前一个数字连续出现至少n次最多m次
a{n}前一个数字连续出现n次
a{n,}前一个数字连续出现至少n次
a{,m}前一个数字连续出现最多m次
过滤出0至少出现三次,最多出现4次
[[email protected] /oldboy]# egrep '0{3,4}' oldboy.txt
my qq is 49000448
not 4900000448.
[[email protected] /oldboy]# egrep '0{3}' oldboy.txt
my qq is 49000448
not 4900000448.
第7章 提取×××号练习题:
[[email protected] /]# cat id.txt
金 211324198705244720
万 500224197105168312
任 1231231231oldboy
任 3oldboy
任 lidao97303136098
任 alex2197303136098
任 350182197303oldgir
吕 211282199209113038
孔 150000198309176071
邹 371001197412221284
贺 130185200011215926
杜 362522198711278101
向 14052219961008852X
[[email protected] /oldboy]# egrep '[0-9X]{18}' id.txt
金 211324198705244720
万 500224197105168312
吕 211282199209113038
孔 150000198309176071
邹 371001197412221284
贺 130185200011215926
杜 362522198711278101
向 14052219961008852X
[[email protected] /oldboy]# egrep '[0-9]{17}[0-9X]' id.txt
金 211324198705244720
万 500224197105168312
吕 211282199209113038
孔 150000198309176071
邹 371001197412221284
贺 130185200011215926
杜 362522198711278101
向 14052219961008852X
BRE
1. ^
2. $
3. ^$
4. .(点)
5. *
6. .*
7. [] [a-z] [A-Z] [0-9]
grep/egrep [a-Z]
8. [^]
ERE小结
1.+
2.|
3.()
4.{}
5. ?
第8章 取出网卡的ip地址
ip a s eth0
ip address show eth0
某一行的某一部分
1.定位 取出某一行
2.sed/awk 取出想要的内容
方法1
[[email protected] /oldboy]# ip a s eth0 |awk 'NR==3'|awk -F"[ /]+" '{print $3}'
10.0.0.200
[[email protected] /oldboy]#
8.1 取出ifconfig eth0 ip地址和子网掩码
[[email protected] /oldboy]# ifconfig eth0 |awk 'NR==2'
inet addr:10.0.0.200 Bcast:10.0.0.255 Mask:255.255.255.0
[[email protected] /oldboy]# ifconfig eth0 |awk 'NR==2' |awk -F"[ :]+" '{print $4,$NF}'
10.0.0.200 255.255.255.0
[[email protected] /oldboy]# ifconfig eth0 |awk 'NR==2'
inet addr:10.0.0.200 Bcast:10.0.0.255 Mask:255.255.255.0
[[email protected] /oldboy]# ifconfig eth0 |awk 'NR==2' |awk -F"addr:|Bcast:" '{print $2}'
10.0.0.200
[[email protected] oldboy]# ifconfig eth0 |awk 'NR==2' |awk -F"addr:|Mask:|Bcast:" '{print $2,$NF}'
10.0.0.200 255.255.255.0
[[email protected] oldboy]#
小结:
1.取出ip地址
2.awk方法 -F (指定分隔符)
总结:
1.正则 BRE ERE
2.排除文件中的空行或以#开头的行 grep sed awk
3.取出网卡ip地址
ifconfig eth0
ip a
awk
sed