shell编程笔记2--》正则表达式 以及shell三剑客
1、正则表达式RE
eg:在vim中:1,$表示1到最后一行 :1,$ s/tom/Tom/g 把所有行的tom换成Tom
eg: :1,$ s/\<[Tt]om\>/aaa/g ---》\<和\>表示前后不能有其他字母,只能有符号
\w:所有字母和数字==》[a-Z0-9]
\W:除所有字母和数字之外的非字符
\b:阔边界 '\<love\>'===>'\blove\b'
sed:文本处理
参数解读
-d 或-4d 删除第几行 或4,7d 4d表示删除第四行
-i:编辑文件(慎用)
-r:支持扩展元字符
eg:sed -r ‘模式’ 文件路径
eg:sed -rn ‘/正则表达式/p’ 文件路径 n:表示不显示默认的行 p:表示打印
sed -r '/root/,5d(+5d)' 文件路径 ,5d表示从root行开始删除第五行 +5d表示root开始删除后五行
在vim中:3,5s/.*/#& ==> &表示前面.*匹配到的内容 表示在3到5行前加#
解读:sed -r '/2/r/shell/passwd' myinfo.txt ===》匹配myinfo.txt的‘2’行然后添加shell下的passwd内容添加到‘2’行下
sed -r '/root/w /shell/test.txt' mypass 匹配完存到test.txt文件中
sed -r '/root/a2222' passwd===》在匹配的行后面添加2222
sed -r '2c999999' passwd ======》第二行替换成99999
sed -r '2i999999' passwd ======》第二行前面插入999999
sed -r '/1/{n;d}' info =====》匹配行的下一行删除
h: 把模式空间里面的内容复制到暂存缓冲区(覆盖)
H:把模式空间里面的内容追加到暂存缓冲区
g:取出暂存缓冲区的内容,将其复制到模式空间,覆盖该处原有内容
G: 取出缓存缓存区的内容,将其复制到模式空间,追加在原有内容后面
AWK ‘BEGIN{FS=":";OFS="==="}’ {print $1,$2} END{print "---"} 文件路径
FS:以:号分隔 匹配 OFS:输出以===拼接输出
awk -F":" '/root/{print $1,$2}' passwd 输出匹配后的行以:分隔后的$1和$2
root:x:0:0:root:/root:/bin/bash 一整条是$0 root是$1以此类推
awk 'BEGIN{FS=":";OFS="==="} /root/{print $1,$2}' passwd
NR和FNR(多个文件可以看出效果):NR表示显示总行数(多个文件合并显示总的多少行)FNR显示各个文件的行数合并在一起(例如两个文件会显示12312但是NR显示12345)
$NF:最后一个字段
字段分隔符:FS和OFS 默认空格和制表符
记录分隔符:RS和ORS 默认换行符
awk -F: 'BEGIN{ORS=""} /root/{print $0}' passwd===》匹配成功的合并成一行
%-15s:占15个字节 s表示字符类型 d数值类型 f浮点类型(注意:在%-15s最后面要加\n换行)
例子: awk -F: '$1~/root/ && $3>300' passwd
vmstat:cpu,I/O负载
iostat:硬盘I/O负载
fdisk:可以查看磁盘大小,iostat查看主要I/O负载 df主要看磁盘利用率
inode:主要用于存放文件的日期等信息,当inode使用率100后就不能创建文件(df -i查看)
统计的例子:
grep '14/Dec/2021' access.log |awk '{count[$1]++}END{for( i in count){print i,count[i]}}'
ls -t |awk 'NR>0{print "rm -f ",$0}'|bash 查询并删除 也可以通过 |xargs rm -rfv(前提要在要删除的目录下)