• 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​

shell三剑客_sed