linux三剑客命令sed,awk

sed命令:

是什么:字符流编辑器,擅长替换
功能与版本:增加,删除,修改,查询
查看版本:sed --version

语法:sed 【选项】【sed指令】【输入文件】
例子:sed -i bak ‘s#oldgirl#oldboy#g’ oldboy.txt
i sed命令的参数 s sed命令的指令 g小尾巴修饰

命令的执行流程:

常用功能:
查询:

创建测试文件:[root@lwg-linux test]# vi persion.txt
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO

1,某一行:sed -n '1p' persion.txt 	因为sed有默认输出功能,所以要加-n取消默认输出
2,显示2-4行:sed -n '2,4p' persion.txt 
3,显示出文件中包含oldbo的行到104开头的行:sed -n '/oldboy/,/^104/p' persion.txt 
4,通过正则表达式过滤: sed -rn '/oldboy|yy/p' persion.txt 
5,显示不同的行:sed -rn '1p;2p;3p' persion.txt 

小结:查询某一行,查询某一个范围 1p 2,4p
sed命令通过正则表达式进行过滤 == egrep

增加:

参数
a	追加append,在指定行后添加一行或者多行文本
i	插入insert,在指定行前添加一行或者多行文本
在第三行后面增加一行: sed '3a 103.5,lee,UFO' persion.txt
在最后一行增加: sed '$a new new new' persion.txt 
 	也可以用这种方法: 
cat >>persion.txt < new,new,new
> old,old,old
> EOF

删除:

d
删除最后一行:sed '$d' persion.txt 
删除连续的几行:sed '2,3d' persion.txt 
过滤掉文件的空行:sed '/^&/d' persion.txt  
显示空行:sed -n '/^&/p' persion.txt 
不显示空行:sed -n '/^$/!p' persion.txt 		在才做前面加叹号

替换和引用变量:

s	替换
g	全局替换、不加g只替换第一个找到的
1,把文件中的字母o替换成AAA:sed 's#o#AAAA#g' persion.txt 
2,如果变量x=oldboy,变量y=oldgirl,要替换两个变量: sed "s#$x#$y#g" persion.txt 	记得要用双引号。

单引号:所见既所得
双引行号:特殊符号会被解析 ¥ ¥() ·· !等

这里有个坑:增删改查记得加-i参数才会保存到硬盘,不加-i只会显示出改后的文件但是不保存

awk命令:

awk的执行过程:
例子:取出passwd文件的第二行的第一列和第二列:
awk -F “:” ‘NR==2{print $1,$2}’ /etc/passwd

格式:awk 【参数】【模式/动作(找谁),条件(干啥)】【文件】

模式匹配:模式与动作

awk数组-统计与计算

查找:

1,找出有数字1的行:awk '/1/' reg.txt 
2,显示第二列包含Xiaoyu的:awk '$2~/Xiaoyu/{print $1,$2,$3}' reg.txt 
3,显示所有41开头的ID号码人的全名和ID号码:awk '$3~/^41/{print $1,$2,$3}' reg.txt 
4,显示所有ID号码最后一位数字是1或者5的人的全名:awk '$3~/[15]$/{print $1,$2}' reg.txt 
5,显示Xiaoyu的捐款,每个值都有以$开头/考替换,如$520$200$135:
awk '$2~/Xiaoyu/{gsub(/:/,"$");print}' reg.txt 

统计:
BEGIN{} BEGIN里面的内容,会在awk读取文件内容之前运行测试,计算
END{}***END{}里面的内容,会在awk读取完文件的最后一行之后运行
用来显示最终结果
1,统计/etc/services文件里面的空行数量:

awk '/^$/{i=i+1}END{print i}' /etc/services 或 awk '/^$/{i=i+1;print i}' /etc/services 

处理以下文件内容,将域名取出并根据域名进行计数排序处理:(百度和sohu面试题)
http://www.etiantian.org/index.html
http://www.etiantian.org/1.html
http://post.etiantian.org/index.html
http://mp3.etiantian.org/index.html
http://www.etiantian.org/3.html
http://post.etiantian.org/2.html

[root@lwg-linux files]# awk -F "[/.]+" '{h[$2]=h[$2]+1}END{print h["www"],h["post"],h["mp3"]} ' url.txt 
3 2 1

====================================================

[root@lwg-linux files]# awk -F "[/.]+" '{h[$2]=h[$2]+1}END{for(pool in h)print pool,h[pool]}' url.txt 
www 3
mp3 1

=======================================================
secure系统日志分析练习/var/log/secure 见我的博客练习题2.2
谁在破解你的密码(Failed password 每个ip地址出现的次数)
分析系统的每个用户破解的次数

你可能感兴趣的:(linux系统知识)