正则表达式

通配符用来匹配文件或文件名

正则表达式则是为了查找对应的文件内容

基本语法

linux规范将正则表达式分为了两种

  • 基本正则表达式(BRE、basic regular expression)
BRE对应元字符有 
^ $ . [ ] *

^字符
匹配以这个字符开头的行

字符$
匹配以这个字符结尾的行

^$
以空开头,空结尾===空行

. 
匹配除了换行符以外所有的内容,除了换行符。

\b 
匹配单词边界,如我想从字符串中“This is Regex”匹配单独的单词 “is” 正则就要写成 “\bis\b”
hello world
helloworld

\n 匹配换行符 ,表示newline,向下移动一行,不会左右移动
\r 匹配回车符,表示return,回到当前行的最左边

在windows中,换行符号是 \r\n
linux中,换行符就是\n

linux中输入 enter键,表示\r \n

linux换行符是\n,表示\r+\n 换行且回车,换行且回到下一行的行首

windows换行符是\r\n,表示回车+换行

\t 匹配一个横向的制表符,等于tab键


其他符号是普通字符
; \
  • 扩展正则表达式(ERE、extended regular expression)
ERE在在BRE基础上,增加了
( ) { } ? + |  等元字符

*和+的区别

语法
*是重复0次、重复多次,因此没匹配到的行也过滤出来了

+是重复1次、多次、因此至少匹配到1次才看到

  • 转义符
反斜杠 \
反斜杠用于在元字符前添加,使其成为普通字符

写shell脚本时还原字符集

LC_ALL=C
这个变量赋值的动作,是等于还原linux系统的字符集

通配符和正则的区别

1.从语法上就记住,只有awk、gred、sed才识别正则表达式符号、其他都是通配符

只有用这3个命令的操作,你写下的特殊符号,才是正则表达式---提取数据流的关键信息

其他linux命令的操作,都是通配符的概念,以及------查找文件名

2.从用法上区分

  • 表达式操作的是文件、目录名(属于是通配符)
  • 表达式操作的是文件内容(正则表达式)

3.比如如下符号区别

通配符和正则表达式 都有  *  ?  [abcd] 符号
通配符中,都是用来标识任意的字符
如 ls *.log,可以找到a.log  b.log   ccc.log


正则中,都是用来表示这些符号前面的字符,出现的次数,如

grep 'a*'

实际案例

通配符,一般用于对文件名的处理,查找文件
如ls命令结合*
意思是匹配任意字符
[root@130 test]# ls *.log
1.log  2.log  3.log  4.log  5.log


而三剑客,结合*符号,是处理文件内容,如grep
此时的*作用就不一样了
[root@130 ~]#ls
anaconda-ks.cfg
[root@130 ~]#touch Yyyy.txt
[root@130 ~]#touch zzzz.txt
[root@130 ~]#ls [a-z]*.txt
Yyyy.txt  zzzz.txt
[root@130 ~]#find /root -name '[a-z]*.txt'
/root/zzzz.txt
[root@130 ~]#find /root -name '[a-Z]*.txt'
/root/Yyyy.txt
/root/zzzz.txt
#这种写法不太规范,但是也能进行查询,尽量以下方规范写法进行查询
[root@130 ~]#find /root -name '[a-z][A-Z]*.txt'
/root/Yyyy.txt
/root/zzzz.txt

练习

基础正则表达式
^       以什么开头,"^yuchao" 表示匹配以yuchao单词开头的行
$       以什么结尾,"yuchao$",表示匹配以yuchao单词结尾的行
^$      组合符号,表示空行。逻辑解释就是以^开始,以$结尾的行
.       匹配任意且只有一个字符,但是不匹配空行
\       转义字符,让特殊符号失效,如"\."只表示小数点
*       匹配前一个字符(连续出现)0次或1次以上,注意,当重复0次的时候,表示什么也没有,但是会撇皮所有内容
.*      组合符,匹配所有内容
[abc]   匹配[]内包含的任意一个字符a或b或c
[a-z]   匹配[]内包含a-z任意一个字符
[0-9]   匹配[]内包含0-9的任意一个数字
[^abc]  匹配不包含^后的任意字符a或b或c,这里的^表示对[abc]的取反,与在外面的^意义不同


扩展正则表达式
--------------------
+				匹配前1个字符1次或多次
[:/]+   匹配括号内的 ":" 或 "/" 字符1次或多次
?       匹配前一个字符0次或1次
|       表示或者,即同时过滤多个字符串
()      分组过滤,被括起来的内容表示一个整体,另外()的内容可以被后面的\n引用,n为数字,表示引用第几个括号的内容
\n      引用前面()里的内容,例如(abc)\1 表示匹配abcabc
a{n,m}  匹配前一个字符最少n次,最多m次
a{n,}   匹配前一个字符最少n次
a{,m}   匹配前一个字符最多m次
a{n}    匹配前一个字符正好n次
  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值