则表达式
基本正则
^    $    [  ]   [^]   .   *    
\{n,m\}   \{n,\}    \(ro\)\{2\}   \(\)   
扩展正则
egrep
grep -E
+     ?     {n,m}    |   ()     
 
\b
 
 athey
 
\bthe\b
 
 
前置指令 |  sed 选项  定址符 指令  
sed 选项  定址符 指令    文件
逐行执行
-n  -r   -i    
/ /p   / /d   /  /s///
 
a 在行下面追加    i 在行上面添加    c替换整行
 
sed 'a 666' user      //所有行下面追加666
sed '1a 666' user     //第1行下面追加666
sed '/bash$/a 666' user    //以bash结尾的行下面追加666
sed 'i 666' user     //所有行上面添加666
sed '1i 666' user     //第1行上面添加666
 
sed '2c 666' user    //将第2行替换为666
sed 'c 666' user    //将所有行替换为666
 
 
sed  修改文本
awk  精确定位查找  逐行执行
 
前置指令 |  awk 选项  条件 指令  
awk 选项  条件 指令     文件
 
选项
-F  指定分隔符
指令
print  输出内容到屏幕
 
列  $1 第一列        $2 第二列
 
awk '{print}' hello    //输出文档所有内容
awk '{print $2}' hello    //输出文档每行第2列
awk '{print $2 , $3}' hello   //输出文档每行第2列和第3列
awk '{print $3,$2}' hello  
awk '{print $1,$2,$3}' hello  
awk '{print $0}' hello     //输出文档每行所有列
awk '{print $0,$3}' hello   //输出文档每行所有列和第3列
 
awk -F: '{print $6}' user   //修改分隔符为冒号,显示第6列
 
awk -F[:/] '{print $9}' user   //修改分隔符为冒号或者斜杠,显示第9列
awk -Fo '{print $2}' hello    //修改分隔符为字母o,显示第2列
 
awk 常用内置变量
$0所有列    $1 $2 $3...  NR 行号    NF 列号
 
awk '{print NR}' hello     //查看行号
awk '{print NF}' hello      //查看有几列
awk '{print NR,NF}' hello    //查看行号和列
awk -Fbin/ '{print $2}'  user    //定义分隔符为bin/,显示第2列
df -h / | awk '{print $4}'   //显示所有行第4列
df -h / | awk '/vda1/{print $4}'   //显示有vda1的行的第4列
df -h / | awk '/vda1/{print "根分区剩余容量是:"$4}'   //显示有vda1的行的第4列,并在前面追加常量, 常量要用双引号
 
使用awk过滤显示网卡流量信息:
ifconfig eth0 |awk '/RX p/{print $5}'
 
ifconfig eth0 |awk '/RX p/{print "eth0网卡接收的流量是" $5"字节"}'
ifconfig eth0 |awk '/TX p/{print "eth0网卡发送的流量是" $5"字节"}'
 
使用awk筛选安全日志中登录密码输错的主机
 
1,在desktop中输入tail -5 /var/log/secure 可以查看安全日志最新的5行记录
2,使用server远程登录desktop,故意输错密码,然后再次查看desktop日志发现最后一行多出记录了
3,使用真机远程登录desktop,也故意输入错误密码(需要提前在desktop中家目录的.ssh中把认证秘钥文件改名)
 
4,在desktop中使用命令过滤日志,查找密码输入失败的行的第11列
awk '/Failed/{print $11}' /var/log/secure
 
使用awk筛选输出用户相应信息
XXX的解释器路径是XXXX,家目录是XXXX
awk -F: '{print $1,"的解释器路径是"$7}' user  
 
控制awk的工作流程
BEGIN{???}   执行1次
{print}         执行n次
END{???}     执行1次
 
制表符   \t   tab键
 
使用awk按流程输出信息:
awk -F: 'BEGIN{print "User\tUID\tHome"}{print $1"\t"$3"\t"$6}END{print "总计 "NR" 行"}' user  
 
 
 awk处理条件
1,   正则     ~ 包含    !~不包含
 
awk -F: '$1~/root/{print}' user     //找第1列包含root的行
awk -F: '/bin/' user        //找有bin的行
awk -F: '$6~/bin/' user      //找第6列包含bin的行
 
awk -F: '$6~/\/bin/' user    //找第6列包含/bin的行
awk -F: '$6!~/\/bin/' user   //找第6列不包含/bin的行
 
2,使用数值/字符串比较设置条件
比较符号:==(等于) !=(不等于) >(大于)
>=(大于等于) <(小于) <=(小于等于)
 
awk -F: '$1=="root"' user   //找第1列等于root的行
awk -F: '$1=="roo"' user   //找第1列等于roo的行
awk -F: '$1~/roo/' user    //找第1列包含roo的行
awk -F: 'NR==3' user     //找第3行
 
awk -F: '$3==0' /etc/passwd   //找管理员
awk -F: '$3<10' /etc/passwd   //找uid小于10的账户
awk -F: '$3<10{print $1}' /etc/passwd   //找uid小于10的账户,并显示账户名
awk -F: '$3>=1000{print $1}' /etc/passwd   //找普通账户,并显示账户名
 
3,逻辑符号
&&  并且  
||     或者
 
awk 'NR>=3 && NR<=5' user    //找3~5行
awk -F: '$3>=100 && $3<=1000' /etc/passwd    //找udi大于等于100,并且小于等于1000的行
awk 'NR>3 && NR<5' user     //找大于3且小于5的行
awk 'NR>3 || NR<5' user    //找大于3或者小于5的行
awk 'NR>5 && NR<3' user    //找大于5且小于3的行,逻辑错误
 
 
awk中数学运算
awk 'BEGIN{x=10;y=20;print x*y}'  //定义变量,然后相乘并输出结果
awk 'BEGIN{x=10;y=20;print y%x}'   //取余
awk 'BEGIN{x=10;y=20;print x+=y}'  //x的自增, 支持主流写法
awk 'BEGIN{x=10;y=20;print x++}'   //将x+1,但不输出
awk 'BEGIN{x=10;y=20;print x++;print x}'   //将x+1,然后输出x
awk 'BEGIN{x=10;y=20;print x+=1}'  //将x+1,同时输出
 
seq 20 | awk '$1%3==0'    //找1~20以内谁是3的倍数
 
 
 
使用awk按照 用户名 --> 密码 的格式输出使用bash的账户信息
 
#!/bin/bash
u=`awk -F: '/bash$/{print $1}' /etc/passwd`
for i in $u
do
grep $i: /etc/shadow | awk -F: '{print $1" --> " $2}'
done
 
########################################################
 
vim  交互式  增删改查
grep 模糊查找
sed  非交互式  增删改查
awk  精确查找
 
前置指令 | awk 选项  条件 指令
awk 选项  条件 指令   文件
 
-F  修改分隔符
print
 
条件
1, 使用正则   ~    !~
2, 字符串与数字  ==  !=   >    >=   <  <=
3,逻辑符号  &&   ||
 
BEGIN{}  执行1次
{  }              执行n次
END{}     执行1次
 
 
awk的if判断
 
单分支
{if(条件){执行指令}}
计算系统中普通账户的数量:
awk -F: '{if($3>=1000){x++}}END{print x}' /etc/passwd
 
awk '{ }END{ }'
 
双分支
{if(条件){执行指令1}else{执行指令2}}
计算系统中普通账户和系统账户的数量:
awk -F: '{if($3>=1000){x++}else{y++}}END{print x,y}' /etc/passwd
 
多分支
{if(条件1){执行指令1}else if(条件2){执行指令2}else{执行指令3}}
 
 
awk 数组
变量 可以存储1个值
数组 可以存储多个值
 
变量名=值
数组名[下标]=值
 
a[1]=10
a[2]=20
 
awk 'BEGIN{a[1]=10;a[2]=20;print a[2],a[1]}'
 
for(变量名称  in 值){执行指令}
 
awk数组+for循环基本用法:
awk 'BEGIN{a[0]=0;a[1]=11;a[2]=22; for(i in a){print i,a[i]}}'    //定义一个数组a, 有3个下标,分别对应3个值, 然后交给for循环,循环显示  下标  和  值
 
awk数组+for循环扩展应用 :
准备文档包含3行内容  
abc
abc
xyz
 
awk '{a[$1]++}END{for(i in a){print i,a[i]}}'  abc
 
a[abc]++      a[abc]=2
a[xyz]++      a[xyz]=1
 
abc 2
xyz 1
 
 
 
ip[192.168.0.1]=2
ip[192.168.0.2]=1
ip[192.168.0.3]=3
 
使用awk统计网站访问量:
1,yum -y install httpd
2,systemctl restart httpd     开启服务
3,使用其他主机访问该网站,多访问几次
    防火墙需要临时关闭   systemctl stop firewalld
4, 使用awk对日志分析, sort可以排序, -n对数字排序, -r降序
awk '{ip[$1]++}END{for(i in ip){print ip[i],i}}' access_log  | sort -nr
5, 可以使用ab工具测试网站后在交给awk分析(安装httpd之后自动安装ab工具)
ab -n 10000 -c 1 172.25.0.10/      1个用户访问1万次网站
 
 
 
#!/bin/bash
while :
do
uptime | awk '{print "cpu平均负载是"$10,$11,$12}'
ifconfig eth0 | awk '/RX p/{print "网卡接收的数据量 是" $5"字节"}'
ifconfig eth0 | awk '/TX p/{print "网卡发送的数据量 是" $5"字节"}'
free -m | awk '/Mem/{print "剩余内存容量是"$4"M"}'
df -h | awk '/vda1/{print "根分区剩余容量是"$4}'
user=`cat /etc/passwd | wc -l`
echo "服务器拥有账户数量是$user个"
u=`who | wc -l`
echo "当前服务器登录用户的数量是$u个"
p=`ps aux | wc -l`
echo "当前主机运行的进程数量是$p个"
ins=`rpm -qa |wc -l`
echo "当前主机安装软件包数量是$ins个"
sleep 3
clear
done
 
编写脚本,监控服务器,如果发现有人尝试登录失败5次则发邮件给管理员
 
#!/bin/bash
x=`awk '/Failed/{ip[$11]++}END{for(i in ip){print ip[i]","i}}' /var/log/secure`
for i in $x
do
    n=${i%,*}
    p=${i#*,}
    [ $n -ge 5 ] && echo "$p访问失败了$n次" | mail -s test root
done
 
测试前可以先删除邮件
rm -rf /var/spool/mail/root

正则表达式以及sed,awk用法 附带案例的更多相关文章

  1. 正则表达式,sed简单用法

      一. 正则表达式 1. 常见的正则表达式字符 [] 匹配字符集 grep "bl[lo]g" oldboy.txt 表示字符‘l’或者‘o’都可匹配 * 重复前面字符任意次 g ...

  2. sed和awk用法

    sed和awk用法 Sed sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作,下面先了解一下sed的用法sed命令行格式为 ...

  3. 三个支持正则表达式的行处理的工具: grep/sed/awk

    grep: 全称Global Regular Expression Print, 是干什么的,不多说了: 用法:grep [-options] [pattern] [filename] 选项: -c: ...

  4. 使用方便 正则表达式grep,sed,awk(一)

    一些无稽之谈: 对于正则表达式,永远似了解不明白,看到一些代码,脚本定期,awk,sed.心里总有点虚.主要是记不住.平时又没怎么用,也就没总结了. 如今有空,决定总结一下,顺便克服一下看到shell ...

  5. 正则表达式(grep,awk,sed)和通配符

    1. 正则表达式 1. 什么是正则表达式? 正则表达式就是为了处理大量的字符串而定义的一套规则和方法. 通过定义的这些特殊符号的辅助,系统管理员就可以快速过滤,替换或输出需要的字符串. Linux正则 ...

  6. linux四剑客-grep/find/sed/awk/详解-技术流ken

    四剑客简介 相信接触过linux的大家应该都学过或者听过四剑客,即sed,grep,find,awk,有人对其望而生畏,有人对其爱不释手.参数太多,变化形式太多,使用超级灵活,让一部分人难以适从继而望 ...

  7. Shell基础(五):sed基本用法、使用sed修改系统配置、sed多行文本处理、sed综合脚本应用

    一.sed基本用法 目标: 本案例要求熟悉sed命令的p.d.s等常见操作,并结合正则表达式,完成以下任务: 1> 删除文件中每行的第二个.最后一个字符    2> 将文件中每行的第一个. ...

  8. Sed&awk笔记之sed篇

    http://blog.csdn.net/a81895898/article/details/8482387 Sed是什么 <sed and awk>一书中(1.2 A Stream Ed ...

  9. AWK用法入门详解

    简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 ...

随机推荐

  1. 1.react的基础

    1.react:专注于UI得一个js库 2.选择使用框架得原因: 写起来简单方便了,但是从稳定性上考虑得话还是原生js要稳定,所以也有很多公司直接使用原生js,但是从开发周期上来说时间会长 之前再写页 ...

  2. <VCC笔记> Assumption

    接下来是第二种注释语句类型Assumption.语法_(Assume E), 这个表达式是让VCC在接下来的额推理中,无视表达式E, 直接认可表达式E. 例: int x, y; _(assume x ...

  3. MySQL数据库基础知识复习

    现在是2020年寒假,这也是新年写的第一篇博客,用了十几天的时间自学了数据库基础部分,想总结一下得失同时并通过写博客来复习前面学的知识点. 个人: 1.本来是计划一周学完基础部分的178p但没能完成这 ...

  4. FR嵌套报表(Nested Report)

    //主界面只是说明放置了哪些东西(3个ADOQuery不必放): //MasterSource.MasterField的设置如下: 1) Customer.Orders.Items 的 MasterS ...

  5. asp.net Mvc 路由详解,非常详细.

    关于路由的理解 为什么要定义路由?路由的定义在开发中的工作量非常小,但是非常重要,因为任何请求都离不开路由. 各个电商网站的 URL 使用非常灵活,都离不开路由的定义,请大家参考几家电商的 URL 如 ...

  6. python中的bytes和str类型

    经过一上午的查找资料.大概理清楚了bytes类型和str类型的区别. bytes类型和str类型在呈现形式有相同之处,如果你print一个bytes类型的变量,会打印一个用b开头,用单引号括起来的序列 ...

  7. PHP丨PHP基础知识之数据类型

    PHP的数据类型主要有三大种:(细分的话8小种) 一.标量数据类型 标量数据类型包括以下几种: (1)BOOLEAN:布尔型 布尔变量是PHP变量中最简单的: 它保存一个TRUE或者FALSE值: 其 ...

  8. SpringCloud 入门(三)

    前文我们介绍了简单的创建一个客户端,并介绍了它是如何提供服务的,接下来介绍它的另外一个组件:zuul. zuul 提供了微服务的网关功能,通过它提供的接口,可以转发不同的服务,可以当作一个中转站. 搭 ...

  9. jvm基础知识1

    堆放实例对象,栈放实例对象的引用,方法区存储创建类的信息 上面堆和垃圾回收的关系,垃圾回收回收的是堆内存的数据,s0和s1区域, 例如现在我们要清除s0中的堆对象,将s0中正在运行的对象从s0区域移动 ...

  10. Python 简明教程 --- 13,Python 集合

    微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 如果代码和注释不一致,那很可能两者都错了. -- Norm Schryer 目录 前几节我们已经介绍 ...