秒解Sed和Awk的秘密

sed秒解
  • 数据的搜寻并替换

    sed ‘s/要被取代的字串/新的字串/g’

    先观察原始信息,利用 /sbin/ifconfig 查询 IP
    这里写图片描述

    获取命令

    ifconfig eth0 | sed -n '/inet /p' | sed 's/inet.*r://' | sed 's/B.*$//'
  • sed高级操作命令(1)

    {}:多个sed命令,用;分开

    实例操作

    nl passwd | sed '{20,30d;s/nologin/login/}'  
    相当于:nl passwd | sed '20,30d' |sed 's/nologin/login/'
  • sed高级操作命令(2)

    &:替换固定字符串

    实例操作

    sed 's/[a-z_-]\+/&   /' passwd
    相当于:sed 's/[a-z_-]\+/[a-z_-]\+   /' passwd

    这里写图片描述

    实例操作

    ls *.txt | sed ‘s/^\w+/\U&/’

    这里写图片描述

  • sed高级操作命令(3)

    ( ):替换某种(部分)字符串(\1,\2)

    实例操作

    ifconfig eth0| sed -n '/inet .*/p' |sed 's/ine.*r:\([0-9.]\+\).*$/\1/
    相当于:ifconfig eth0 | sed -n '/inet /p' | sed 's/inet.*r://' | sed 's/B.*$//'

    这里写图片描述

  • sed高级操作命令(4)

    r:复制指定文件插入匹配的行
    w:复制匹配行拷贝指定文件里

    实例操作

    sed '1r 123.txt' abc.txt
    sed 'w abc.txt' 123.txt  

    这里写图片描述

  • sed高级操作命令(5s)

    q退出sed

    实例操作

    nl passwd| sed '10q'
    nl passwd| sed '/nologin/q'

    这里写图片描述

awk秒解(文本与数据处理工具)

  • awk处理方式(awk一次处理一行内容;对每行可以切片处理)

    awk ‘{print $1}’ //输出首个单词

  • 内置函数应用
    awk内置参数 : 分割符

    options -F filed-separator(默认为空格)

    实例操作

    awk -F ":" '{print $1}' passwd //以:分割获取第一个字符
    awk -F ":" '{print "user:"$1"\t""uid:"$2 }' passwd //拼接打印用户名和用户id   

    这里写图片描述
    awk内置变量

    NR:每行的记录号
    NF:字段数量变量
    FILENAME:正在处理的文件名
    实例操作

    awk -F ":" '{print "行号:"NR"字符串数量:"NF"文件名:"FILENAME}' passwd

    这里写图片描述
    awk操作函数printf()

    printf()

    实例操作

    awk -F  ':'  '{printf("Line:%3s,Col:%s,User:%s,uid:%s\n",NR,NF,$1,$3)}' passwd

    这里写图片描述

awk操作函数if()

流程判断语句的处理

实例操作

    awk -F ":" '{if($3>100) print "Line: "NR"Col: "NF"Usr: "$1"uid: "$3}' passwd

这里写图片描述
awk获取log错误日志的时间

流程判断语句的处理

实例操作

sed '/error/p' /var/log/nginx/error.log | awk '{print $1}' /var/log/nginx/error.log
相当于:awk '/error/{print $1}' /var/log/nginx/error.log

这里写图片描述

这里写图片描述

awk逻辑判断式

~,!~:匹配正则表达式
==,!=,>,<判断逻辑表达式

实例操作

awk -F ":" '$1~/^m.*/{print $1}' passwd
相反
awk -F ":" '$1!~/^m.*/{print $1}' passwd
awk -F ":" '$3>100{print $1,$3}' passwd
相反
awk -F ":" '$3<100{print $1,$3}' passwd
awk -F ":" '$3==70{print $1,$3}' passwd
相反
awk -F ":" '$3!=70{print $1,$3}' passwd 

这里写图片描述
使用awk—–扩展格式

BEGIN{print ‘start’}pattern{commands} END{print ‘end’}

实例操作

awk -F ':' 'BEGIN{print "Line col Username"}{print NR,NF,$1}END{print"----PASSWORD----"}' passwd

这里写图片描述

案例一

统计指定目录下所有文件大小之和

实例操作

ls -l | awk 'BEGIN{size=0}{size+=$5}END{print "size is " size/1024/1024 "M"}'

这里写图片描述
案例二

获取文件用户的数量(去除无效用户)
获取uid大于100的用户并且输出其名称

实例操作

awk -F ":" 'BEGIN{count=0}$1!~/^$/{count++} END{print"COUNT " count}' passwd
awk -F ":" 'BEGIN{count=0}$3>100{name[count++]=$1 } END{for(i=0;i<count;i++) print i,name[i]}' passwd

这里写图片描述

案例三

统计netstat -anp 状态下为LISTEN和CONNECTED连接数量
实例操作

netstat -anp | awk '$6~/CONNECTED|LISTEN/{sum[$6]++}END{for(i in sum) print i,sum[i]}'

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值