「这是我参与11月更文挑战的第14天,活动详情查看:2021最后一次更文挑战」
1.正则表达式(regular expression-RE) 练习的模拟环境:
cat >>oldboy.txt<<EOF
I am oldboy!
I teach linux
EOF
基础正则表达式 - basic regular expression - BRE 1)^ --- 以什么开头的信息找出来
测验一:找出以m开头的文件内容信息
grep '^m' oldboy.txt
grep命令特点:按行进行操作处理(过滤)
如何给grep命令匹配出来的信息标记颜色
给grep命令设置一个别名
alias grep='grep --color=auto' 临时设置
echo "alias grep='grep --color=auto'">>/etc/profile 永久设置
[root@fu ~]# source /etc/profile 加载
2)$ --- 找出以什么什么结尾的信息过滤出来
测验练习二:找出以m结尾的内容信息
[root@fu ~]# grep 'm$' oldboy.txt
my blog is http://oldboy.blog.51cto.com
3)^$ -- 找寻匹配空行信息(进行过滤)
测验练习题三:过滤空行信息
[root@fu ~]# grep -v '^m$' oldboy.txt -v == !
I am oldboy !
I teach linux
4). -- 匹配任意一个字符信息且只能是一个字符信息(无法匹配空行信息)
grep '.' oldboy.txt
5)* -- 匹配0个或1次以上连续的字符信息(表示前一个字符连续出现1次或0次以上)
grep '0*' oldboy.txt
什么叫匹配了0次??
会匹配出文件找不到内容,预支匹配
默认会将所有内容都显示出来
6).* --- 匹配文件中的所有内容(可以匹配空行信息) grep '.*' oldboy.txt
测验xx:请找出文件中以m开头,一行中所有信息
[root@fu ~]# grep '^m.*' oldboy.txt
mygod ,i am not oldboy,but OLDBOY!
测验xx:请找出文件中以m开头,到m字符终止匹配
[root@fu ~]# grep '^m.*m' oldboy.txt
mygod ,i am not oldboy,but!
- \ -- 转移符号(中文--英文 英文--中文) 作用: 可以将有意义的符号,转换成没有意义 . 可以将没有意义的符号,转换成有意义的 \n .(匹配任意字符)-- . --加个撬棍一个点表示字符信息 -- \. --取消转译
测验练习题:将下面文件中一行信息,转换成一列显示
01 02 03 04 05
01
02
03
04
05
tr "要进行替换的信息" "替换成什么信息" alex.txt
[root@fu ~]# tr " " "\n" <alex.txt 空格替换成换行符号
01
02
03
04
05
- [^abc] -- 排除/不匹配 指定字符信息
[root@fu ~]# grep "[^a-z]" oldboy.txt
I am oldboy !
I teach linux
[root@fu ~]# grep "^[^a-z]" oldboy.txt 不要以小写字母开头的句子
I am oldboy
测验xx:找出以.结尾的相应行的信息 grep '.$' oldboy.txt
扩展正则表达式 - extended regular expression - ERE
-
- --- 匹配1个或1次以上连续的字符信息
[root@fu ~]# egrep '0*' --color oldboy.txt
I am oldboy !
[root@fu ~]# egrep '3*' --color oldboy.txt
9)[]+ 组合的用处
[root@fu ~]# grep "[0-9]" oldboy.txt -o
5
1
4
9
0
0
0
4
4
8
4
9
0
0
0
0
0
4
4
8
[root@fu ~]# grep "[0-9]" oldboy.txt
my blog is sss
[root@fu ~]# grep "[0-9]+" oldboy.txt
[root@fu ~]# egrep "[0-9]+" oldboy.txt
not 4900000448
10)| 表示匹配多个满足条件的信息(彼此之间是或者关系) egrep 'o|y|t' oldboy.txt
11)() 匹配一个整体信息(字符串信息) [a,usgduagd] 匹配中括号里面的一个一个元素信息
表示匹配一个整体消息 egrep 'oldb(o|e)y' 表示过滤整体信息
表示用于后项引用前项 sed -r 's#(.*)#</1>#g' 利用sed命令实现后项引用前项
sed -r 's#([0-9]+)#<\1>#g'利用sed命令实现后项引用前项
sed -r 's#(12)(34)(56)#<\1><\2><\3>#g'利用sed命令实现后项引用前项
[root@fu ~]# egrep 'oldb[oe]y' oldboy.txt
I am oldboy teacher!
[root@fu ~]# egrep 'oldb(oe)y' oldboy.txt
[root@fu ~]# egrep 'oldb(o|e)y' oldboy.txt
I am oldboy teacher!