- sed
功能一:查找
1.指定行号(-n取消默认输出)
$ sed -n '2p' n.txt
2.指定连续多行
$ sed -n '2,5p' n.txt
3.或者过滤(正则)
$ sed -nr '/JVM|running/p' n.txt
4.范围过滤(条件,从哪里到哪里)
$ sed -nr '/01:22:55/,/01:22:59/p' /var/log/messages
5.没有规律的行
$ sed -n '1p,5p,9p' n.txt
6.有规律的行(逐行增加2)
$ sed -n '1~2p' 1
功能二:增加
c==change 替换
a==append 追加(后面)
i==insert 插入(前面)
在第一行后面追加:
$ sed -i ‘1aJack,26,CTO’ n.txt
指定特殊条件后面追加:
$ sed -ri '/Jack|25/a1234567,CTO' n.txt
追加多行:
$ sed -ri '/Jack|25/a12306,CTO\n12333,AVI' n.txt
功能三:删除
d==delete 删除行
$ sed -i '1d' n.txt
删除空行或者只有空格(连续空格)的行
$ sed -r '/^$|^ +$/d' blank.txt
功能四:修改(替换)
sed ‘s###g’
s == substitute sub 替换
g == global 全局 默认只会替换第1个匹配的内容
后向引用,取出网卡ip地址
$ ip a s eth0 |sed -n 3p |sed -r 's#^.*t (.*)/.*$#\1#g'
网卡配置文件中取ip地址
$ ifconfig eth0|sed -n 2p |sed -r 's#(^.*et )(.*)( n.*$)#\2#g'
- awk
1、取行取列
取行
$ awk 'NR==2;NR==5;NR==10' /etc/passwd
取列
awk -F":" '{print $1,$NF,$3}' /etc/passwd
#显示自定义,分隔符
$ awk -F : '{print $1","$2}' /etc/passwd|tail -1
$ vsftpuser,x
2、比较表达式
$ awk 'NR>=2 && NR<=5' /etc/passwd
$ awk -F : '$3>500' /etc/passwd
3、正则条件
~ :匹配,包含
找出第2列中包含Xiaoyu,显示姓氏和ID
$ awk '$2~/Xiaoyu/' n.txt
$ awk '$2~/Xiaoyu/{print $1,$2,$3}' n.txt
显示所有不以一个D或X开头的人的全名
$ awk '$2!~/^[DX]/{print $1,$2}' n.txt
过滤xxx,每个值都以$开头
$ awk -F “[ :]+” '$2~/^[DX]/{print "$"$4"$"$5"$"$6}' n.txt
4、范围条件
#并打印行号
$ awk 'NR==1,NR==5 {print NR,$0}' /etc/passwd
cut命令
$ cut -d ":" -f1-3 /etc/passwd
-d 指定一个分隔符
-f 取列
5、Awk进行计算
统计空行
$ awk '/^$/{i++}END{print i}' /etc/services
统计nologin结尾的行数
$ awk '/nologin$/{b++}END{print b}' /etc/passwd
统计 /etc/passwd 中第3列在1-1000范围内的行数
$ awk -F':' '$3>=1 && $3<=1000{i++}END{print i}' /etc/passwd
$ awk -F ":" '$3>=1 && $3<=1000' /etc/passwd |wc -l
i=i+1 == i++ 统计次数 一共出现了多少次
#awk进行计算统计的套路:先计算,最后END{}显示结果
6、特殊条件BEGIN{}和END{}
BEGIN{} 里面的内容会在awk读取文件之前执行 ;一般用于计算 、测试
$ awk 'BEGIN{print 2/3,1+3,3*3,1-3,2^10}'
0.666667 4 9 -2 1024
&&&&
END{} 里面的内容会在awk读取文件之后执行;一般用于显示前面计算的结果,统计的结果
#统计文件中空行的数量
$ awk '/^$/{i++}END{print i}' n.txt
#统计文件中nologin结尾的行数
$ awk '/nologin$/{i++}END{print i}' /etc/passwd
#统计文件中第三列在1-1000范围内的行数
$ awk -F: '$3>=1 && $3<=1000 {i++}END{print i}' /etc/passwd