三剑客之正则表达式

什么是正则表达式

1)正则表达式就是为了处理大量的文字、文本、字符串而定义的一套规则和方法。
2)通过定义的这些特殊符号的辅助,系统管理员就可以快速过滤,替换或输出需要的字符串。
3)Linux正则表达式一般以行为单位处理的

为什么使用正则表达式

1)linux运维工作 大量过滤(找东西)日志工作。化繁为简。 
2)简单,高效,易用。
3)正则表达式高级工具:三剑客 都支持。

通配符和正则表达式

1)正则表达式应用非常广泛,存在于各种语言中,php perl python grep sed awk 支持。ls* 通配符。
2)但现在学的是Linux中的正则表达式,最常应用正则表达式的命令是grep(egrep)、sed、awk。-->正则表达式通常只有awk、sed、grep能使用
3)正则表达式和通配符有本质区别.
4)通配符例子 ls file *.log  filef.log  grep "e*" e ee eeee  ef
正则表达式用来找:【文件】内容,文本,字符串。高级货,三剑客。
通配符用来找什么:文件名(*.txt),或找文件,普通命令都支持

区分

1)不需要思考的判断方法:在三剑客awk、sed、grep egrep 都是正则,其他都是通配符。
2)区分通配符和正则表达式最简单的方法:
文件[目录]名-->通配符----->ls *.txt
文件内容(字符串,文本,【文件】内容)-->正则表达式 grep "shang" shang.txt 
3)通配符和正则表达式都有“ *”、“ ?”、“ []”,但是通配符的这些符号都能自身代表任意字符,而正则表达式的这些符号只能代表这些符号前面的字符。

正则表达式的分类

POSIX规范将正则表达式的分为了两种
1)基本正则表达式(BRE,basic regular expression)
2)高级功能:扩展正则表达式(ERE,extended  regular expression)

BRE和ERE的区别仅仅是元字符的不同:
BRE(基础正则表达式)只承认的元字符有^  $  .   [   ]   *  其他字符识别为普通字符;\(\)
ERE(扩展正则表达式)则添加了(   )  {   }   ?   +  | 等
只有在用反斜杠"\"进行转义的情况下,字符(   )  {   }才会在BRE被当作元字符处理,而ERE中,任何元符号前面加上反斜杠反而会使其被当作普通字符来处理。

基本正则表达式

环境准备
[root@shang:~]# cat a.txt 
I am shangwenhao.
Nice to meet you.
test

I enjoy playing games and fishing.
My favorite foods are pig's trotters and mutton soup.
My email number is 3511606727@qq.com.

aaaa,
not 572891888887.
^^^^^^^^667788##%%$$$$$$$^^^$$
shangwenhaoshangwenhao
^ 已...开头
[root@shang:~]# grep '^My' a.txt 
My favorite foods are pig's trotters and mutton soup.
My email number is 3511606727@qq.com.

$ 以...结尾 包括空格
使用cat –A  在文件的末尾显示$
-A 在文件末尾显示$ 把tab键显示为^I
[root@shang:~]# grep 'hao$' a.txt 
shangwenhaoshangwenhao

'' 查找文件的空格
[root@shang:~]# grep ' ' a.txt 
I am shangwenhao.
Nice to meet you.
I enjoy playing games and fishing.
My favorite foods are pig's trotters and mutton soup.
My email number is 3511606727@qq.com.
not 572891888887.

‘’单引号 所见即所得,不能解析变量
“” 双引号 和不加引号 可以解析变量

^$ 表示空行 什么符号都没有
[root@shang:~]# grep '^$' a.txt 


. 任意一个字符 不会匹配到空行
[root@shang:~]# grep '.' a.txt 
I am shangwenhao.
Nice to meet you.
test
I enjoy playing games and fishing.
My favorite foods are pig's trotters and mutton soup.
My email number is 3511606727@qq.com.
aaaa,
not 572891888887.
^^^^^^^^667788##%%$$$$$$$^^^$$
shangwenhaoshangwenhao


\ 撬棍 转义字符 脱掉马甲打回原形
\n  回车换行
\t  tab键


* 前一个字符连续出现了0次或0次以上
Linux三剑客正则表达式01坑 *
'1*' 0次以上 1 1111 1111111
'1*' 出现0次 ‘ ’ 会显示所有内容

.* 所有  任何符号 包含空行
第二坑 正则的贪婪匹配 .* 所有符号 任何符号 连续出现的字符 有多少匹配多少

[] [abc] 相当于是一个符号 每次匹配1个字符 找出包含a或b或c
[root@shang:~]# grep [abc] a.txt # 不是查找包含abc的行,而是查找包含a 或b 或c的行
I am shangwenhao.
Nice to meet you.
I enjoy playing games and fishing.
My favorite foods are pig's trotters and mutton soup.
My email number is 3511606727@qq.com.
aaaa,
shangwenhaoshangwenhao

[root@shang:~]# grep [a-z,0-9] a.txt 
I am shangwenhao.
Nice to meet you.
test
I enjoy playing games and fishing.
My favorite foods are pig's trotters and mutton soup.
My email number is 3511606727@qq.com.
aaaa,
not 572891888887.
^^^^^^^^667788##%%$$$$$$$^^^$$
shangwenhaoshangwenhao


[^ ] [^abc] 取反 排除a 排除b 排除c  中括号默认不匹配空行
[root@shang:~]# grep [^a-z] a.txt 
I am shangwenhao.
Nice to meet you.
I enjoy playing games and fishing.
My favorite foods are pig's trotters and mutton soup.
My email number is 3511606727@qq.com.
aaaa,
not 572891888887.
^^^^^^^^667788##%%$$$$$$$^^^$$
扩展正则:
语法:
	  grep -E '' file
     egrep '过滤的内容' file
+ 前一个字符连续出现1次或1次以上
[] 与 + 结合使用 过滤 连续的内容
[root@shang:~]# egrep '[a-z]+' a.txt 
I am shangwenhao.
Nice to meet you.
test
I enjoy playing games and fishing.
My favorite foods are pig's trotters and mutton soup.
My email number is 3511606727@qq.com.
aaaa,
not 572891888887.
shangwenhaoshangwenhao

{} 
第一种方法 {n,m}前一个字符至少连续出现n次 最多出现m次
[root@shang:~]# egrep '6{1,2}' a.txt 
My email number is 3511606727@qq.com.
^^^^^^^^667788##%%$$$$$$$^^^$$

第二种方法6{2} 最多显示多少次
[root@shang:~]# egrep '6{2}' a.txt 
^^^^^^^^667788##%%$$$$$$$^^^$$

() 表示一个整体  反向引用/后向引用
[root@shang:~]# egrep 'ha(o|s)+' a.txt 
I am shangwenhao.
shangwenhaoshangwenhao
shangwenhaosssss
孩儿立志出乡关,学不成名誓不还。埋骨何须桑梓地,人生无处不青山。

评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇