正则表达式,又称规则表达式,是一种文本模式,包括普通字符和特殊字符,是计算机科学的一个概念。而且正则表达式应用非常广泛,存在于各种语言中,即便是Linux系统中也有着非常重要的作用,接下来我们继续往下看。
04.路径切换特殊符号

波浪线介绍与实践
在Linux系统命令行中,~代表用户的家目录:
实践操作作用演示:
[root@xiaoq etc]# pwd/etc[root@xiaoq etc]# cd ~[root@xiaoq ~]# pwd/root[root@xiaoq ~]# cd /etc/[root@xiaoq etc]# pwd/etc[root@xiaoq etc]# cd-- cd命令后什么信息都不加,也等价于cd ~作用[root@xiaoq ~]# pwd/root
短横线介绍与实践
在Linux系统命令行中,短横线代表上一次用户所在的路径。
实践操作作用演示:
# 操作过程演示[root@xiaoq ~]# cd /etc/[root@xiaoq etc]# [root@xiaoq etc]# cd -/root[root@xiaoq ~]# pwd/root[root@xiaoq ~]# cd -/etc[root@xiaoq etc]# pwd/etc# 操作过程机制[root@xiaoq ~]# echo $OLDPWD/etc[root@xiaoq ~]# cd -/etc[root@xiaoq etc]# echo $OLDPWD/root[root@xiaoq etc]# cd $OLDPWD[root@xiaoq ~]# pwd/root
点符号介绍与实践
在Linux系统命令行中,点号代表当前目录。
实践操作作用演示:
[root@xiaoq etc]# pwd/etc[root@xiaoq etc]# cd .[root@xiaoq etc]# pwd/etc[root@xiaoq etc]# find . -name "*.sh" ./dhcp/dhclient-exit-hooks.d/azure-cloud.sh[root@xiaoq etc]# rm ./xiaoQ* -rf
双点号介绍与实践
在Linux系统命令行中,双点号代表当前目录的上一级目录。
实践操作作用演示:
[root@xiaoq etc]# pwd/etc[root@xiaoq etc]# cd ..[root@xiaoq /]# pwd/[root@xiaoq /]# ls -a /test_dir/. ..
05.逻辑相关特殊符号

逻辑符号多用于后续课程的shell脚本编写中,命令行应用情况比较少见,此时作为了解即可。
逻辑符号&&介绍与实践
在Linux系统中表示,判断前一个操作是否成功,如果成功再进行后续的操作;
[root@xiaoq /]# # 有钱 -- 买房[root@xiaoq /]# rm -rf /test_dir/[root@xiaoq /]# mkdir /test_dir && cd /test_dir-- 创建目录成功后,才会切换目录[root@xiaoq test_dir]# pwd/test_dir[root@xiaoq test_dir]# cd [root@xiaoq ~]# mkdir /test_dir && cd /test_dir/mkdir: cannot create directory ‘/test_dir’: File exists-- 创建目录失败后,就不会切换目录[root@xiaoq ~]# [root@xiaoq ~]# mkdir /test_dir ; cd /test_dir/mkdir: cannot create directory ‘/test_dir’: File exists-- 对比分号操作,分号分割的多个命令,没有逻辑概念,会同时执行
逻辑符号||介绍与实践
在Linux系统中表示,判断前一个操作是否失败,如果失败再进行后续的操作;
[root@xiaoq ~]# mkdir /test_dir || echo "dir create error" ||mkdir: cannot create directory ‘/test_dir’: File existsdir create error-- 创建失败,会执行的操作[root@xiaoq ~]# rm /test_dir/ -rf[root@xiaoq ~]# mkdir /test_dir || echo "dir create error" ||-- 创建成功,就不会执行指定操作
逻辑符号组合使用情况
判断成功和判断失败逻辑符号也可以组合使用,实现多种情况的灵活处理;
[root@xiaoq ~]# # && || -- 钱 -- 有钱 && 生活轻松 没钱 || 努力奋斗 [root@xiaoq ~]# rm /test_dir/ -rf[root@xiaoq ~]# mkdir /test_dir && echo "目录创建成功" || echo "目录创建失败" ||目录创建成功-- 目录创建成功处理方案[root@xiaoq ~]# mkdir /test_dir && echo "目录创建成功" || echo "目录创建失败" ||mkdir: cannot create directory ‘/test_dir’: File exists 目录创建失败-- 目录创建失败处理方法
系统正则符号介绍
1、正则符号简介说明
简单地说,正则表达式符号就是为处理大量的字符串及文本而定义的一套规则和方法;
通过这些正则符号,管理员可以快速过滤,替换或输出所需要的字符串。使运维工作更加高效。
正则表达式符号应用非常广泛,存在于各种语言之中,例如 python java go等语言中都存在;
但是Linux运维人员只要掌握bash解释器环境中的正则表达式用法即可,即可三剑客grep sed awk命令,
进行有效的应用,从而提高工作效率即可。
在学习掌握正则表达式时,需要注意以下几点:
正则表达式是以行为单位进行处理的;
正则表达式仅适用于三剑客命令加载识别(grep sed awk);
正则表达式使用时,主要LC_ALL环境变量要设置为LC_ALL=C;
2、正则符号分类介绍
Linux的正则表达式可分为两类:
基础正则表达式(BRE basic regular expression)
对应的正则符号:^$.[]*; 通常默认可以直接被三剑客命令识别;
扩展正则表达式(ERE extended regular expression)
对应的正则符号:(){}?+|;三剑客命令在加载识别时,除awk命令可以直接识别,grep和sed命令都要加指定参数识别
3、基础正则符号简介

以上基础正则符号会分为三个部分学习01-05 06-09 10-11;要以视频操作显示的信息为主
4、基础正则符号实践
基础正则符号实践操作环境准备:
[root@xiaoq ~]# mkdir ~/test[root@xiaoq ~]# cd ~/test[root@xiaoq test]# cat >~/test/xiaoQ.txt<<EOFI am xiaoQ teacher! I teach linux. I like badminton ball ,billiard ball and chinese chess! my qq num is 3052869928. not 3052869999928.my god ,i am not xiaoB,but XIAOQ EOF[root@xiaoq test]# cat -n xiaoQ.txt 1 I am xiaoQ teacher! 2 I teach linux. 3 4 I like badminton ball ,billiard ball and chinese chess! 5 my qq num is 3052869928. 6 7 not 3052869999928. 8 my god ,i am not xiaoB,but XIAOQ
基础正则符号功能实践-^
尖角符号表示匹配每行以指定字符开头的信息;
实践操作作用演示:输出以m开头的所有行并打印行号
[root@xiaoq test]# grep -n "^m" xiaoQ.txt 5:my qq num is 3052869928.8:my god ,i am not xiaoB,but XIAOQ
若没特殊需求,建议用双引号将过滤的内容引用起来,否则可能会遇到异常问题。
基础正则符号功能实践-$
美元符号表示匹配每行以指定字符结尾的信息;
实践操作作用演示:输出以Q结尾的所有行并打印行号
[root@xiaoq test]# grep "Q$" xiaoQ.txt my god ,i am not xiaoB,but XIAOQ[root@xiaoq test]# grep -i "q$" xiaoQ.txt my god ,i am not xiaoB,but XIAOQ[root@xiaoq test]# grep "Q$" xiaoQ.txt|cat -Amy god ,i am not xiaoB,but XIAOQ$
基础正则符号功能实践-^$
实践操作作用演示:过滤出空行信息
[root@xiaoq test]# grep -n "^$" xiaoQ.txt 3: 6:
实践操作作用演示:过滤除空行以外信息
[root@xiaoq test]# grep -nv "^$" xiaoQ.txt 1:I am xiaoQ teacher!2:I teach linux.4:I like badminton ball ,billiard ball and chinese chess!5:my qq num is 3052869928.7:not 3052869999928.8:my god ,i am not xiaoB,but XIAOQ
当^开头与$结尾连在一起时,解可以理解为开头到结尾中间没有任何数据内容,即表示的就是空行。
基础正则符号功能实践-.
点符号表示匹配任意一个字符(有且只有一个),但不包含空行。
实践操作作用演示:匹配任意一个字符并输出对应文件中的行号
[root@xiaoq test]# grep -n "." xiaoQ.txt 1:I am xiaoQ teacher!2:I teach linux.4:I like badminton ball ,billiard ball and chinese chess!5:my qq num is 3052869928.7:not 3052869999928.8:my god ,i am not xiaoB,but XIAOQ
匹配任意一个字符,所以文件的内容都出来了,但是上面找到的内容不包含空行。
思考:点表示匹配任意字符,并且匹配且只有一个字符,怎么文件所有字符都出来了?
实践操作作用演示:显示以点结尾的行
[root@xiaoq test]# grep -n ".$" xiaoQ.txt 1:I am xiaoQ teacher!2:I teach linux.4:I like badminton ball ,billiard ball and chinese chess!5:my qq num is 3052869928.7:not 3052869999928.8:my god ,i am not xiaoB,but XIAOQ
.$表示的是以任意单个字符结尾的行,因此结果并不是需求的目标。
基础正则符号功能实践-\
转义符号主要用途是让有特殊含义的符号变为一般符号,当然也可以将没有作用的字符变为有特殊意义;
实践操作作用演示:显示以点结尾的行
[root@xiaoq test]# grep -n "\.$" xiaoQ.txt 2:I teach linux.5:my qq num is 3052869928.7:not 3052869999928.
实践操作作用演示:转义特殊字符信息
[root@xiaoq test]# echo "xiaoQnlinux"xiaoQnlinux[root@xiaoq test]# echo -e "xiaoQ\nlinux"xiaoQ linux[root@xiaoq test]# echo -e "xiaoQ\tlinux"xiaoQ linux
基础正则符号功能实践-*
星号表示匹配前一个字符0次或0次以上的数据内容;
实践操作作用演示:输出文件中连续出现了0次或0次以上的数字9的内容
[root@xiaoq test]# grep "9*" xiaoQ.txt I am xiaoQ teacher! I teach linux.I like badminton ball ,billiard ball and chinese chess! my qq num is 3052869928.not 3052869999928.my god ,i am not xiaoB,but XIAOQ-- 每行中没有出现9字符,就表示出现0次,也会匹配,所以所有文件内容都会显示[root@xiaoq test]# grep "9" xiaoQ.txt my qq num is 3052869928.not 3052869999928.-- 单独过滤数字9,只有含有9字符的行会出现,没有9字符(出现0次的)不会显示
基础正则符号功能实践-.*
.*组合使用时表示匹配所有字符,包含空行。
实践操作作用演示:通过grep显示文件的所有内容,包含空行
[root@xiaoq test]# grep ".*" xiaoQ.txt I am xiaoQ teacher! I teach linux.I like badminton ball ,billiard ball and chinese chess! my qq num is 3052869928.not 3052869999928.my god ,i am not xiaoB,but XIAOQ[root@xiaoq test]# grep "." xiaoQ.txt I am xiaoQ teacher! I teach linux.I like badminton ball ,billiard ball and chinese chess! my qq num is 3052869928.not 3052869999928.my god ,i am not xiaoB,but XIAOQ
虽然.*和. 都可以将文件中的所有信息进行匹配显示,但是还是有本质区别的,利用grep -o参数可以看出其中奥秘
[root@xiaoq test]# grep -o ".*" xiaoQ.txt I am xiaoQ teacher! I teach linux.I like badminton ball ,billiard ball and chinese chess! my qq num is 3052869928.not 3052869999928.my god ,i am not xiaoB,but XIAOQ[root@xiaoq test]# grep -o "." xiaoQ.txt I a m x i a
grep -o参数可以将每次匹配的信息按行单独显示,具体说明每次匹配的内容。
参见下图进行解释说明:

实践操作作用演示:匹配开头所有字符,每行到o字符结束/匹配从o开始到指定最后字符结束
[root@xiaoq test]# grep "^.*o" xiaoQ.txt I am xiaoQ teacher! I like badminton ball ,billiard ball and chinese chess!not 3052869999928.my god ,i am not xiaoB,but XIAOQ[root@xiaoq test]# grep "o.*$" xiaoQ.txt I am xiaoQ teacher! I like badminton ball ,billiard ball and chinese chess!not 3052869999928.my god ,i am not xiaoB,but XIAOQ
已经实现了匹配任意多个字符开头一直到第一个字母o为止的内容;
但可以看出实际上匹配到了每一行的最后一个字符o,因为正则符号匹配信息以行为单位并且具有贪婪特性。
基础正则符号功能实践-[]
中括号表示匹配其中的任何一个字符,[abc]会匹配a或b或c
匹配 方式有:

实践操作作用演示:匹配文件中所有的大写字母
[root@xiaoq test]# grep '[A-Z]' xiaoQ.txt I am xiaoQ teacher! I teach linux.I like badminton ball ,billiard ball and chinese chess! my god ,i am not xiaoB,but XIAOQ
实践操作作用演示:匹配字符串xiaoQ信息
[root@xiaoq test]# grep '[xiaoQ]' xiaoQ.txt I am xiaoQ teacher! I teach linux.I like badminton ball ,billiard ball and chinese chess! my qq num is 3052869928.not 3052869999928.my god ,i am not xiaoB,but XIAOQ[root@xiaoq test]# grep 'xiaoQ' xiaoQ.txt I am xiaoQ teacher!
中括号里面的字符会单个进行匹配,并不是看成一个整体进行匹配。
基础正则符号功能实践-[^]
表示将中括号中的每个字符进行取反匹配;
实践操作作用演示:匹配除了小写字母以外的字符
[root@xiaoq test]# grep "[^a-z]" xiaoQ.txt I am xiaoQ teacher! I teach linux.I like badminton ball ,billiard ball and chinese chess! my qq num is 3052869928.not 3052869999928.my god ,i am not xiaoB,but XIAOQ
5、扩展正则符号简介

由于以上信息为扩展正则, 利用grep命令识别扩展正则符号需要使用-E参数或者直接使用egrep命令进行过滤.
6、扩展正则符号实践
扩展正则符号实践操作环境准备:
# 测试实践环境准备:[root@xiaoq test]# cat > xiaoT.txt<<EOF> gd> god> good> goood> gooood> goooood> EOF[root@xiaoq test]# cat xiaoT.txt gd god good goood gooood goooood
扩展正则符号功能实践-+
加号表示匹配前一个字符出现1次或1次以上情况, 与基础正则里的* 类似, 只不过比 * 少了一个匹配0次
实践操作作用演示:匹配文件中出现o字符的情况
# 匹配连续出现的o字符信息[root@xiaoq test]# grep "o*" xiaoT.txt gd god good goood gooood goooood-- 匹配o出现0次或连续出现多次的情况[root@xiaoq test]# grep "o+" xiaoT.txt -- 扩展正则符号识别时. grep命令加-E参数或直接使用egrep命令[root@xiaoq test]# grep -E "o+" xiaoT.txt god good goood gooood goooood-- 匹配o出现1次或连续出现多次的情况
扩展正则符号功能实践-?
问号表示匹配前一个字符出现0次或1次
实践操作作用演示:匹配文件中包含gd或god的信息
[root@xiaoq test]# grep -E "go?d" xiaoT.txt gd god-- g和d间出现0次或1次o字符情况[root@xiaoq test]# grep -E "go+d" xiaoT.txt god good goood gooood goooood-- g和d间出现1次或多次o字符情况[root@xiaoq test]# grep -E "go*d" xiaoT.txt gd god good goood gooood goooood-- g和d间出现0次或多次o字符情况
扩展正则符号功能实践-|
竖线在扩展正则中表示或者, 可以实现过滤多个字符信息
实践操作作用演示:只过滤文件中good和goood字符串信息
[root@xiaoq test]# grep -E "good|goood" xiaoT.txt good goood# 企业环境应用[root@xiaoq ~]# grep -E "faild|error" /var/log/server.log-- 分析日志文件时, 就会用到多个关键信息进行筛选匹配的情况
扩展正则符号功能实践-()
小括号表示可以实现分组过滤被括起来的内容, 括号内的信息表示一个整体
实践操作作用演示:取出包含good或glad的信息
# 测试实践环境调整:[root@xiaoq test]# echo "glad" >>xiaoT.txt [root@xiaoq test]# cat xiaoT.txt gd god good goood gooood goooood glad# 匹配good或glad的信息[root@xiaoq test]# grep -E "goo|lad" xiaoT.txt good goood gooood goooood glad[root@xiaoq test]# grep -E "g(oo|la)d" xiaoT.txt good glad
扩展正则符号功能实践-{n,m} {n,} {n} {,m}
实践操作作用演示:匹配字符o, 连续出现3到5次的信息
[root@xiaoq test]# grep -E "o{3,5}" xiaoT.txt goood
gooood
goooood
实践操作作用演示:匹配字符o, 连续最少出现3次的信息
[root@xiaoq test]# grep -E "o{3,}" xiaoT.txt goood
gooood
goooood
实践操作作用演示:匹配字符o, 连续正好出现3次的信息
[root@xiaoq test]# grep -E "o{3}" xiaoT.txt goood
gooood
goooood
实践操作作用演示:匹配字符o, 连续最多出现5次的信息
[root@xiaoq test]# grep -E "o{,5}" xiaoT.txt gd
god
good
goood
gooood
goooood
glad
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69952968/viewspace-3101554/ ,如需转载,请注明出处,否则将追究法律责任。