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(前提要在要删除的目录下)

posted on 2021-12-10 14:53  bruce.sharp  阅读(123)  评论(0)    收藏  举报