Linux的正则表达式

目录

  1. 正则简介
  2. 正则三剑客一:grep
  3. 正则三剑客二:sed
  4. 正则三剑客三:awk

1. 正则简介

什么是正则表达式?
简单的说,正则表达式就是为处理大量的字符串而定义的一套规则和方法

通过定义的这些特殊符号的辅助,系统管理员就可以快速过滤,替换或输出需要的字符串。Linux正则表达式一般以行为单位处理。

掌握好正则对于编写shell脚本有很大帮助

各种编程语言中都有正则,原理是一样的

linux的正则表达式,最常应用正则表达式的命令就是grep、egrpe、sed、awk,换句话说linux三剑客要想能工作的更高效,那一定离不开正则表达式的配合。

正则表达式和我常用的通配符特殊字符是有本质区别的。

2.正则三剑客一:grep

grep的功能主要用于过滤指定关键词。

命令:grep
参数:
-c :行数
-i :不区分大小写
-n :显示行号
-v :取反
-r :遍历所有子目录
-A :后面跟数字,过滤出符合要求的行以及下面n行
-B :同上,过滤出符合要求的行以及上面n行
-C :同上,同时过滤出符合要求的行以及上下各n行

例子:
grep -n 'root' /etc/passwd:列出/etc/passwd内容里带有root的行,并标注处所在的行是文件内的第几行
在这里插入图片描述
grep -nv 'nologin' /etc/passwd:列出/etc/passwd内容里不带有‘nologin’的行,并标注处所在的行是文件内的第几行
在这里插入图片描述
grep '[0-9]'/etc/inittab:列出/etc/inittable内容里带有数字的行
在这里插入图片描述
grep -v '[0-9]'/etc/inittab:列出/etc/inittable内容里不带有数字的行
在这里插入图片描述
grep -v '^#' /etc/inittab:列出/etc/inittable内容里不是以“#”开头的行,因为没有,且小郭为了证实,在命令后面加了管道验证
在这里插入图片描述
grep -v '^#' /etc/inittab|grep -v '^$':列出/etc/inittable内容里不是以“#”开头且不是以"$"开头的行,因为没有,小郭为了证实,在命令后面加了管道验证
在这里插入图片描述
grep '^[^a-zA-Z]' test.txt:列出test.txt内容里不是以字母开头的行,因为没有,小郭为了证实,在命令后面加了管道验证
在这里插入图片描述
grep 'r.o' test.txt:列出test.txt内容里,格式为“r.o”的行(这里的格式是r和o中间必须有一个字母的,例如:rao、rbo、rio等(小郭甚是想喝一瓶rio了))
在这里插入图片描述
grep 'oo*' test.txt:列出test.txt文件中所有包含o或者oo的行
在这里插入图片描述
grep '.*' test.txt:列出test.txt文件中所有内容
在这里插入图片描述
grep 'o\{2\}' test.txt:列出test.txt文件中格式为oo的行(必须是两个o且oo必须连在一起)
在这里插入图片描述
egrep 'o{2}' test.txt:列出test.txt文件中格式为两个o或更多的o的行(含有两个o)
在这里插入图片描述
egrep 'o+' test.txt:列出test.txt文件中格式为一个o或更多的o的行(含有一个o)
在这里插入图片描述
egrep 'oo?' /etc/passwd:列出/etc/passwd文件中oo出现和没出现的行,若oo没出现则列出o出现的行
在这里插入图片描述
egrep 'root|nologin' /etc/passwd:列出/etc/passwdt文件中包含root或包含nologin的行
在这里插入图片描述
egrep '(oo){2}' test.txt:列出test.txt文件中00连在一起的行(这一行是小郭自己随便加的)
在这里插入图片描述

3. 正则三剑客二:sed

sed也可以实现grep的一些功能,但是稍麻烦,sed 的主要通能在于查找替换。

命令:sed
参数:
-n∶使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
-e∶直接在指令列模式上进行 sed 的动作编辑;
-f∶直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作;
-r∶sed 的动作支援的是延伸型正规表示法的语法。(预设是基础正规表示法语法)
-i∶直接修改读取的档案内容,而不是由萤幕输出。

a∶新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c∶取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d∶删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i∶插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p∶列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起运作~
s∶取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!

例子:
sed -n '$'p test.txt:显示test.txt文件中最后一行的内容
在这里插入图片描述
sed -n '1,5'p test.txt:显示test.txt文件中第一行到第五行的内容
在这里插入图片描述
sed -n '1,$'p test.txt:显示test.txt文件中第一行到最后一行的内容
在这里插入图片描述
sed -n '/root/'p test.txt:显示test.txt文件中含有root的行的内容
在这里插入图片描述
sed -n '/^1/'p test.txt:显示test.txt文件中以1为开头的行的内容,因为没有,效果为了验证于是在命令后面加管道显示数字
在这里插入图片描述
sed -n '/in$/'p test.txt:显示test.txt文件中所有以in为结尾的行的内容
在这里插入图片描述
sed -n '/r..o/'p test.txt:显示r…o 中间任意2个字符的行
在这里插入图片描述
sed -e '1'p -e '/111/'p -n test.txt:多条件匹配打印(或者关系, 或重合多次打印,符合条件1打印1次,符合条件2又打印1次)
在这里插入图片描述
sed '1'd test.txt:显示test.txt删除第一行后的结果
在这里插入图片描述
sed '1,3'd test.txt:显示test.txt删除第一行到第三行后的结果
在这里插入图片描述
sed '/oot/'d test.txt:显示test.txt删除含有oot的行后的结果
在这里插入图片描述
sed '1,2s/ot/to/g' test.txt:显示test.txt内的第一行和第二行里的ot换成to后的结果
在这里插入图片描述
sed 's#ot#to#g' test.txt:示test.txt内的ot换成to后的结果
在这里插入图片描述
sed 's/[0-9]//g' test.txt:显示test.txt文档中删除内容里的数字后的结果
在这里插入图片描述
sed 's/[a-zA-Z]//g' test.txt:显示test.txt文档中删除内容里的英文字母后的结果
在这里插入图片描述
sed -r 's/(rot)(.*)(bash)/\3\2\1/' test.txt
在这里插入图片描述
sed 's/^.*$/123&/' test.txt:显示test.txt所有行都更换为以123开头的内容
在这里插入图片描述
sed -i 's/ot/to/g' test.txt:将test.txt文件中的ot全部换成to,没有提示,但是命令运完成后保存
在这里插入图片描述

4.正则三剑客三:awk

awk是一种很棒的语言,它适合文本处理和报表生成。其语法较为常见,借鉴了某些语言的一些精华,如C语言等。

命令:awk
参数:
-F: fs fs指定输入分隔符,fs可以是字符串或正则表达式,如-F:
-v :var=value 赋值一个用户定义变量,将外部变量传递给awk
-f :scripfile 从脚本文件中读取awk命令
例子:
head -n2 test.txt|awk -F ':' '{print $1}':查看test.txt的第一列的头两行
在这里插入图片描述
head -n2 test.txt|awk -F ':' '{print $0}':查看test.txt的头两行的所有数据
在这里插入图片描述
awk -F ':' '{print $1"#"$2"#"$3"#"$4}' test.txt :查看test.txt第1列、第2列、第3列、第4列,并用“#”分开
在这里插入图片描述
awk '/oo/' test.txt:查看test.txt文件中每一列凡是含有“oo”的数据,打印出含有oo数据的所在的列
在这里插入图片描述
awk -F ':' '$1 ~/oo/' test.txt:查看test.txt文件中第一列中含有oo的数据
在这里插入图片描述
awk -F ':' '/root/ {print $1,$3} /test/ {print $1,$3}' test.txt:匹配root的行打印第1段和第3段且同时匹配user的行打印第1段和第3段,多个表达式一起写
在这里插入图片描述
awk -F ':' '$3=="0"' test.txt:查看test.txt文件中第三列数值等于0所在的行的数据
在这里插入图片描述
awk -F ':' '$3>="500"' test.txt:查看test.txt文件中第三列数值大于等于500所在的行的数据(500加双引号说明只让第三列的数值对500进行比较)
在这里插入图片描述
awk -F ':' '$3>=500' test.txt:查看test.txt文件中第三列大于等于500所在的行的数据(不加双引号说明不对数据类型做要求)
在这里插入图片描述
awk -F ':' '$7!="/sbin/nologin"' test.txt:查看test.txt文件中第七列不是/sbin/nologin所在的行的数据
在这里插入图片描述
awk -F ':' '$3<$4' test.txt:查看test.txt文件中第三列数据大于第四列数据所在的行的数据
在这里插入图片描述
awk -F ':' '$3>"5" && $3<"7"' test.txt:查看test.txt文件中第三列数据大于5且小于7的数据
在这里插入图片描述
awk -F ':' '$3>1000 || $7=="/bin/bash"' test.txt:查看test.txt文件中第三列大于1000或者第七列是/bin/bash所在的行的数据
在这里插入图片描述
head -5 test.txt |awk -F ':' '{OFS="#"} {print $1,$3,$4}‘:查看test.txt文件的第一列第三列第四列的前五行数据,并用#分开
在这里插入图片描述
awk -F ':' '{OFS="#"} {if ($3>1000) {print $1,$2,$3,$4}}' test.txt
在这里插入图片描述
head -n3 test.txt | awk -F ':' '{print NF}':查看test.txt文件中前三行有的列数(每行都是7列数据)
在这里插入图片描述
head -n3 test.txt | awk -F ':' '{print NR}':查看前三行有的行数
在这里插入图片描述
awk 'NR>40' test.txt:查看test.txt文件中40行之后的数据,因为文件并没有40行所以小郭查看总数验证
在这里插入图片描述
awk -F ':' 'NR<20 && $1 ~ /roo/' test.txt:查看test.txt文件中前20行并且第一列是root的行所在数据
在这里插入图片描述
head -n 3 test.txt |awk -F ':' '$1="root"‘:查看三行test.txt文件中第一列为root的行所在的数据
在这里插入图片描述
awk -F ':' '{(tot=tot+$3)}; END {print tot}' test.txt:查看test.txt文件中第三列的所有数据进行累加后的值
在这里插入图片描述
awk -F ':' '{if ($1=="root") {print $0}}' test.txt·:如果test.txt文件中第一列的数据为root,则打印所在行的所有数据
在这里插入图片描述

以上就是小郭学习linux的部分内容

有用请点赞,养成良好习惯!

疑问交流鼓励请留言!

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值