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]}'