9 Linux特殊符号-通配符与正则表达式

1.常见的特殊符号:
'' “所见即所得” “吃啥吐啥”
"" 里面的符号会被解析
`` $() 先运行里面的命令,把结果留下

> 重定向符号,先清空文件的内容,然后再追加文件的最后
>> 追加重定向,追加文件的最后
2> 错误重定向,只有错误的信息,才会通过这个漏洞进入文件中
2>> 错误追加重定向

~ 当前用户家目录
root ~/root
oldboy ~/home/oldboy
# 注释;root 用户的命令提示符
$ 取出变量的内容;普通用户的命令提示符

! 查找并运行历史命令
!awk 包含awk的命令,最近的一条运行
* 所有,任何东西
\ 撬棍,转义字符

&& 前一个命令执行成功然后再执行后一个命令
|| 前一个命令执行失败然后再执行后一个命令
[root@oldboyedu-01 ~]# ifdown eth0 && ifup eth0
Determining if ip address 10.0.0.200 is already in use for device eth0...

2.通配符号:
通配符是用来在查找文件的。
(1)* 所有,任意
[root@oldboyedu-01 ~]# mkdir -p /oldboy
[root@oldboyedu-01 ~]# cd /oldboy/
[root@oldboyedu-01 oldboy]# touch oldboy.txt oldboy oldboyfile oldboy.awk eduoldboy
[root@oldboyedu-01 oldboy]# find /oldboy/ -type f -name "oldboy"
/oldboy/oldboy
[root@oldboyedu-01 oldboy]# find /oldboy/ -type f -name "*oldboy"
/oldboy/eduoldboy
/oldboy/oldboy
[root@oldboyedu-01 oldboy]# find /oldboy/ -type f -name "*oldboy*"
/oldboy/eduoldboy
/oldboy/oldboy
/oldboy/oldboy.txt
/oldboy/oldboyfile
/oldboy/oldboy.awk

(2){} 生成序列
[root@oldboyedu-01 oldboy]# echo {01..10}
01 02 03 04 05 06 07 08 09 10
[root@oldboyedu-01 oldboy]# echo {a..z}
a b c d e f g h i j k l m n o p q r s t u v w x y z
[root@oldboyedu-01 oldboy]# echo {1,9,20}
1 9 20
[root@oldboyedu-01 oldboy]# echo 20{01..10}
2001 2002 2003 2004 2005 2006 2007 2008 2009 2010

[root@oldboyedu-01 oldboy]# echo A{B,C}
AB AC
[root@oldboyedu-01 oldboy]# echo A{,C}
A AC
[root@oldboyedu-01 oldboy]# ls /oldboy/oldboy.txt
/oldboy/oldboy.txt
[root@oldboyedu-01 oldboy]# cp /oldboy/oldboy.txt{,.bak} //备份

3.正则表达式:通过符号来表达文字内容。
作用:提高效率、省事!
支持正则表达式:linux三剑客(grep,sed,awk)
使用注意事项:
a.正则表达式是按照行进行处理的
b.禁止使用中文符号
c.给grep和egrep配置别名

[[root@oldboyedu-01 ~]# grep "3306" /etc/services
mysql 3306/tcp # MySQL
mysql 3306/udp # MySQL
[root@oldboyedu-01 ~]# grep --color=auto "3306" /etc/services
mysql 3306/tcp # MySQL
mysql 3306/udp # MySQL
[root@oldboyedu-01 ~]# alias grep='grep --color=auto'
[root@oldboyedu-01 ~]# alias egrep='egrep --color=auto'
[root@oldboyedu-01 ~]#
[root@oldboyedu-01 ~]#
[root@oldboyedu-01 ~]# cat >>/etc/profile<<EOF
> alias grep='grep --color=auto'
> alias egrep='egrep --color-auto'
> EOF
[root@oldboyedu-01 ~]# tail -5 /etc/profile
unset -f pathmunge
alias rm='echo do not use rm'
export PATH=/application/mysql/bin:$PATH
alias grep='grep --color=auto'
alias egrep='egrep --color-auto'
[root@oldboyedu-01 ~]# source /etc/profile

4.正则表达式与通配符区别:
用途: 匹配内容: 支持的命令:
通配符 --用来匹配查找文件名 *.txt *.log结尾的文件 大部分命令都可使用
正则表达式--在文件中匹配查找内容 包含oldboy的行 linux三剑客

5.正则表达式分类:
基础正则表达式:^ $ . * [] [^] BRE(basic regular expression) grep sed awk
扩展正则表达式:| + {} () ? ERE(extended regular expression)egrep sed -r awk
举例:
[root@oldboyedu-01 ~]# cat -A /oldboy/oldboy.txt
I am oldboy teacher!$
I teach linux.$
$
I like badminton ball,billiard ball and chinese chess!$
my blog is http://www.cnblogs.com/crmn$
our site is http://mooc.study.163.com$
my qq number is 2431108588.$
$
not 123456789.$
my god ,i am not oldboy,but OLDBOY!$
$
基础正则表达式:
(1)^ 查找匹配以...开头的行
[root@oldboyedu-01 ~]# grep '^my' /oldboy/oldboy.txt
my blog is http://www.cnblogs.com/crmn
my qq number is 2431108588.
my god ,i am not oldboy,but OLDBOY!

(2)$ 查找匹配以...结尾的行
[root@oldboyedu-01 ~]# grep 'm$' /oldboy/oldboy.txt
our site is http://mooc.study.163.com

//空格 查找匹配包含空格的行
[root@oldboyedu-01 ~]# grep ' ' /oldboy/oldboy.txt

//^$ 空行 这一行中没有任何的符号。查找匹配包含空行的行
[root@oldboyedu-01 ~]# grep -n '^$' /oldboy/oldboy.txt
3:
8:
11:

[root@oldboyedu-01 ~]# grep -v '^$' /oldboy/oldboy.txt //-v排除空行,再输出
I am oldboy teacher!
I teach linux.
I like badminton ball,billiard ball and chinese chess!
my blog is http://www.cnblogs.com/crmn
our site is http://mooc.study.163.com
my qq number is 2431108588.
not 123456789.
my god ,i am not oldboy,but OLDBOY!

(3). 匹配任意一个字符,不包含空行
[root@oldboyedu-01 ~]# grep '.' /oldboy/oldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball,billiard ball and chinese chess!
my blog is http://www.cnblogs.com/crmn
our site is http://mooc.study.163.com
my qq number is 2431108588.
not 123456789.
my god ,i am not oldboy,but OLDBOY!

[root@oldboyedu-01 ~]# grep -o '.' /oldboy/oldboy.txt //-o 表示grep的执行过程,正则每次匹配到了什么!

//\ (撬棍),转义字符,脱掉马甲打回原形!
[root@oldboyedu-01 ~]# grep '\.$' /oldboy/oldboy.txt //查找以.结尾的行内容
I teach linux.
my qq number is 2431108588.
not 123456789.

(4)* 前一个字符连续出现0次或1次以上 >=0 贪婪性
形如:
A*表示这两层意思:
0次A //什么也没有,就会把整个文件内容显示出来
A连续出现1次以上。 //A...
[root@oldboyedu-01 ~]# grep -o '0*' /oldboy/oldboy.txt //正则在表示连续的时候会表现出贪婪性,有多少匹配多少(有多少吃多少)
000
00000
[root@oldboyedu-01 ~]# grep '0*' /oldboy/oldboy.txt //
I am oldboy teacher!
I teach linux.

I like badminton ball,billiard ball and chinese chess!
my blog is http://www.cnblogs.com/crmn
our site is http://mooc.study.163.com
my qq number is 243110008.

not 120000089.
my god ,i am not oldboy,but OLDBOY!

// .* 所有字符 所有符号 所有
//正则中表示 连续出现或者 所有的时候 表现出贪婪性 有多少匹配多少
[root@oldboyedu-01 ~]# grep '^.*0' /oldboy/oldboy.txt
my qq number is 243110008.
not 120000089.

[root@oldboyedu-01 ~]# grep '^m.*m' /oldboy/oldboy.txt
my blog is http://www.cnblogs.com/crm
my qq number is 243110008.
my god ,i am not oldboy,but OLDBOY!
[root@oldboyedu-01 ~]# grep '^m.*m$' /oldboy/oldboy.txt //eg:查找出以m开头并且以m结尾的行
my blog is http://www.cnblogs.com/crm
[root@oldboyedu-01 ~]# grep '^m' /oldboy/oldboy.txt |grep 'm$' //等价
my blog is http://www.cnblogs.com/crm

(5)[] 中括号 [abc] 相当于是一个字符,找出包含a或者b或者c的行。
[root@oldboyedu-01 ~]# grep '[abc]' /oldboy/oldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball,billiard ball and chinese chess!
my blog is http://www.cnblogs.com/crm
our site is http://mooc.study.163.com
my qq number is 243110008.
my god ,i am not oldboy,but OLDBOY!
[root@oldboyedu-01 ~]# grep '[a-z]' /oldboy/oldboy.txt //
I am oldboy teacher!
I teach linux.
I like badminton ball,billiard ball and chinese chess!
my blog is http://www.cnblogs.com/crm
our site is http://mooc.study.163.com
my qq number is 243110008.
not 120000089.
my god ,i am not oldboy,but OLDBOY!
[root@oldboyedu-01 ~]# grep '[a-zA-Z0-9]' /oldboy/oldboy.txt //
I am oldboy teacher!
I teach linux.
I like badminton ball,billiard ball and chinese chess!
my blog is http://www.cnblogs.com/crm
our site is http://mooc.study.163.com
my qq number is 243110008.
not 120000089.
my god ,i am not oldboy,but OLDBOY!

//eg:以m或者n或者o开头的 并且以m或g结尾的行
[root@oldboyedu-01 ~]# grep '^[mno].*[mg]$' /oldboy/oldboy.txt
my blog is http://www.cnblogs.com/crm
our site is http://mooc.study.163.com

[root@oldboyedu-01 ~]# grep '[a,b,o]' /oldboy/oldboy.txt //或者,

(6)[^] [^abc] 查找匹配包含排除a或者b或者c的内容行
[root@oldboyedu-01 ~]# grep '[^abc]' /oldboy/oldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball,billiard ball and chinese chess!
my blog is http://www.cnblogs.com/crm
our site is http://mooc.study.163.com
my qq number is 243110008.
not 120000089.
my god ,i am not oldboy,but OLDBOY!

扩展正则表达式:
(1)+ 前一个符号连续出现1次或者多次,可将连续的内容通过正则取出来,与[]配合使用,能量加倍!
[root@oldboyedu-01 ~]# egrep '0+' /oldboy/oldboy.txt
my qq number is 243110008.
not 120000089.

[root@oldboyedu-01 ~]# egrep '[a-z]+' /oldboy/oldboy.txt -o //取出文件中连续出现的小写字母

(2)| 或者
[root@oldboyedu-01 ~]# egrep 'oldboy|linux' /oldboy/oldboy.txt
I am oldboy teacher!
I teach linux.
my god ,i am not oldboy,but OLDBOY!
//[] 与 | 区别:
都可以表示或者 [abc] a|b|c
区别:
[]基础正则,|扩展正则;
[]表示单个字符或者,|单个字符或者多个字符都可以
[a-z] oldboy|linux

(3)()中的内容相当是一个整体,后向引用(反向引用)
[root@oldboyedu-01 ~]# egrep 'oldb(o|e)y' /oldboy/oldboy.txt
I am oldboy teacher!
my god ,i am not oldboy,but OLDBOY!
hello ,i am not oldboy,but oldbey!

//后向引用(反向引用):sed,先把想要的内容通过括号保护起来,然后再使用它。eg:取网卡地址
[root@oldboyedu-01 ~]# echo 123456 |sed -r 's#(.*)#\1#g'
123456
[root@oldboyedu-01 ~]# echo 123456 |sed -r 's#(.*)#<\1>#g'
<123456>
[root@oldboyedu-01 ~]# echo 123456 |sed -r 's#.(.)..(.).#\1#g'
2
[root@oldboyedu-01 ~]# echo 123456 |sed -r 's#.(.)..(.).#\2#g'
5

(4)o{n,m} 前一个字符连续出现了至少n次,最多m次。
o{n,} 前一个字符连续出现了至少n次。
o{n} 前一个字符连续出现了n次。
o{,m} 前一个字符连续出现了最多m次。
[root@oldboyedu-01 ~]# egrep '0{1,4}' /oldboy/oldboy.txt
my qq number is 243110008.
not 120000089.
[root@oldboyedu-01 ~]# egrep -o '0{1,4}' /oldboy/oldboy.txt
000
0000
0
[root@oldboyedu-01 ~]# egrep -o '0{3,4}' /oldboy/oldboy.txt
000
0000
[root@oldboyedu-01 ~]# egrep -o '0{3,}' /oldboy/oldboy.txt
000
00000
[root@oldboyedu-01 ~]# egrep -o '0{3}' /oldboy/oldboy.txt
000
000
[root@oldboyedu-01 ~]# egrep '[0-9]{8,}' /oldboy/oldboy.txt //查找数字连续出现8个以上的内容行。
my qq number is 243110008.
not 120000089.

(5)? 表示前一个字符出现了0次或者1次。
[root@oldboyedu-01 ~]# egrep 'gd|god' /oldboy/ge.txt
gd
god
[root@oldboyedu-01 ~]# egrep 'go?d' /oldboy/ge.txt
gd
god
[root@oldboyedu-01 ~]# egrep 'go*d' /oldboy/ge.txt
gd
god
goood
goooood

posted @ 2017-12-25 22:33  bkycrmn  阅读(189)  评论(0)    收藏  举报