正则
含义:就是一串有规律的字符串
grep
用来过滤指定关键词的
格式:grep后边跟关键词在跟文件名
-c 显示行数

-i 不区分大小写,加上-i它会把大写的显示出来

-n 显示行号
![U}TEYBI1_(WR1QZ1]8)VNLJ.png wKiom1lvC5fCDWHUAAGpGO-rTT4443.png](https://resources.devmax.cn/uploads/20230727/56fb61d239180047ad761436dff79454.png)
-v 取反,意思就是把你指的关键词之外的全显示出来,例如我一开始指定要带nologin的,加上-v之后就会显示不带有它的,如图。

-r 把一些子目录或者孙目录所有下边的文件遍历一遍
-A后面跟数字,过滤出符合要求的行以及下面的n行,意思就是比如你要过滤关键词root,加上-A2,它会给你把只要有root关键词的这一行加上往下的两行一起列出来,如下图。
![Z]@D8K_8@G@4CQFY(27P}~V.png wKioL1lvDJnSF6odAAFQMCKEbZg144.png](https://resources.devmax.cn/uploads/20230727/56fb61d239180047ad761436dff79454.png)
-B跟A相反,过滤出符合要求的行以及上面的n行
![[3]KLWJ4]@5RK`WJ_W(695D.png wKioL1lvDLGCeCFMAAEq2Cozq3o047.png](https://resources.devmax.cn/uploads/20230727/56fb61d239180047ad761436dff79454.png)
-C全是AB的结合,过滤出符合要求的行以及上下各n行

grep'[0-9]'表示过滤0-9的数字,例如,grep ’[0-9]'passwd如下图

grep-n'^#'意思是以#号开头的行

grep-vn'^#'意思是不以#号开头的行

grep'[^0-9]'把里边非0-9的列出来

grep'^[^0-9]'以一个非数字开头的行全部列出来

grep-v'^[^0-9]'相反的行


grep'o*o'*表示0个过多个*前面的字符

grep'.*'表示任意一个任意字符
grep'o\{2\}' 一样的命令还有egrep'o{2}' grep-E'o{2}'花括号表示前面这个字符的重复范围

egrep'o+o'意思是加号前面这个字符的一次或多次
egrep'o?t'表示问号前面这个字符的重复次数为零或者一

grep-E'root|nologin'竖线是或者的意思

sed
sed-n只匹配一个指定字符例如,
sed-n'/root/'ptest.txt只匹配有root字符的行
sed-r加上r之后就不用拖一了,例如,sed-nr'/o+t/'ptest.txt
sed-nr'/o{2}/'ptest.txt匹配两次o
sed-n'5'ptest.txt打印指定的行
sed-n'1,5'ptest.txt打印指定范围的行
sed-n'1,$'ptest.txt打印指定的行到末尾的行,$末尾行的意思
sed-n'/root/'ptest.txt
sed-n‘/^1/'ptest.txt
sed-n'in$'ptest.txt
sed-n'/r..o/'ptest.txt
sed-noo*ptest.txt
sed-e在同一个表达式里边做多项操作,例如,我不仅要把几行打印出来还要匹配字符串:sed-e'1'p-e/bus/'p-ntest.txt
![J`@P7OIU8]TG_`004MADQ~2.png wKiom1lwbYLBVLVAAAFUZAf1Uxc928.png](https://resources.devmax.cn/uploads/20230727/56fb61d239180047ad761436dff79454.png)
在p后边加上大i就不会区分大小写了sed-e'1'p-e/bus/'pI-ntest.txt
怎么删除行,加d选项,例如
sed'1,10'dtest.txt意思是把一到十行删除,但是他并没有删除,只是把剩下的行给列出来
set-i这个是删除选项,例如删除指定行sed-i'1,10'dtest.txt删除指定字符的行 sed-i'/user2/'dtest.txt
替换需要加s,g意思是全局替换,例如:sed'1,10s/root/toor/g'test.txt
意思是把一到十行里的root替换成toor 如下图
![~D6ZB{{}U(M]YJJB}OF(ZBO.png wKiom1lwbevjRnY5AAFBJBEg9HY161.png](https://resources.devmax.cn/uploads/20230727/56fb61d239180047ad761436dff79454.png)
删除英文字母:sed's/[a-zA-Z]//g'如下图

出现两个//时它会报错我们需要加上\,例如:sed's//root/123/g'换成sed's/\/root/123/g'如下图:

在所有的行前面加上一个固定的字符串如下图:

如何把第一段和最后一段调换位置,如下图:

awk
把第一段打印出来:awk -F ‘:’ ‘{print $1}’ test.txt 如下图:
![2WHW`RJV]IU0%)Q@1XY_R70.png wKiom1lwjxigKV9vAAB8H_4SzDM767.png](https://resources.devmax.cn/uploads/20230727/56fb61d239180047ad761436dff79454.png)
打印所有的段用0表示:awk ‘:’ ‘{print $0}’ test.txt
打印指定更多的段:awk -F ‘:’ ‘{print $1,$2,$3}’ test.txt
列出指定的字符,例如oo:awk ‘oo' test.txt

只要第一段带oo的:awk -F ‘:’ ‘$1 ~ /oo/’ .test.txt
![O1PI[IG]GQV]G1STAZL_D@1.png wKiom1lwj12yH44sAACaJFb6XT4070.png](https://resources.devmax.cn/uploads/20230727/56fb61d239180047ad761436dff79454.png)
多个表达式一起写:awk -F ':' '/root/ {print $1,$3} /test/ {print $1,$3}' /etc/passwd
查找第三段等于0行:awk -F ':' '$3=="0"' /etc/passwd
查找某一段大于等于500的:awk -F ':' '$3>="500"' /etc/passwd
!=意思就是不等于:awk -F ':' '$7!="/sbin/nologin"' /etc/passwd
还可以把第几段小于第几段的列出来:awk -F ‘$3<$4’

相等的段也可以列出来:awk -F ‘$3=$4’
![KQHJ]{]FV[}(($M8@5)R6H8.png wKiom1lwj87Qbnt3AAFMBASDwhI105.png](https://resources.devmax.cn/uploads/20230727/56fb61d239180047ad761436dff79454.png)
还可以把一段大于几并且小于几的一同列出来:awk -F ‘$3>“5” && $3<“7”’
![}WZRUQR8XIJ)E1FK}DK1M]Q.png wKiom1lwj-DikQAoAAEscsh64Yk853.png](https://resources.devmax.cn/uploads/20230727/56fb61d239180047ad761436dff79454.png)
||是或者的意思:awk -F ':' '$3>"5" || $7=="/bin/bash"' /etc/passwd

OFS是在你打印的时候指定的分隔符。例如:
awk -F ‘:’ ‘{OFS=“#”}{if ($3>1000) {print $1,$2,$3,$4}’
![KD4S2W1%TD2QTQ`0$]D(VWT.png wKiom1lxpfLDzNdOAAEQ4XgXKpU601.png](https://resources.devmax.cn/uploads/20230727/56fb61d239180047ad761436dff79454.png)

NF表示打印是的段:awk -F ':' '{print NF“:”$0}'
![W5OAZGI]{UUVIZB%5KL_X4Y.png wKioL1lxqLOwDZRdAAESabF6c4M025.png](https://resources.devmax.cn/uploads/20230727/56fb61d239180047ad761436dff79454.png)
只要前十行:awk -F ‘:’ ‘NR<=10’
计算某个段落的总和:awk -F ':' '{(tot=tot+$3)}; END {print tot}' /etc/passwd END表示所有的行都已经执行。