四.awk、sde深度讲解

###sed###

 

 

 

查询

1创建测试文件

cat>person.txt<<EOF
> 101,oldboy,CEO
> 102,zhangyao,CTO
> 103,Alex,COO
> 104,yy,CFO
> 105,feixue.CIO
> EOF

2查询单行文本

2连续查询多行文本

3显示出文件包含oldboy的行到包含104的行

等于grep  'oldboy'  person.txt

^104以104开头更加精确

4过滤多个字符串

 

 

 

7查询指定多行 使用;分号

增加

 

1增加单行文本

 #sed  '3a 103.5,Lee,UFO'  person.txt
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
103.5,Lee,UFO
104,yy,CFO
105,feixue.CIO
# sed  '3i 103.5,Lee,UFO'  person.txt
101,oldboy,CEO
102,zhangyao,CTO
103.5,Lee,UFO
103,Alex,COO
104,yy,CFO
105,feixue.CIO

2增加多行文本

# sed '$a new,new,new,' person.txt

$a 最后一行
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue.CIO
new,new,new,
# sed '2a 106,xiaoyu,CXO\n107\n108\n109' person.txt

101,oldboy,CEO
102,zhangyao,CTO
106,xiaoyu,CXO
107
108
109
103,Alex,COO
104,yy,CFO
105,feixue.CIO

一般追加到行位用的cat>person.txt<<EOF

追加到某一行就用sed  i  a

 删除

sed   '/^$/d'   person.txt 

删除空行

 

sed   -n  '/^$/!p'  person.txt 

/^$/p显示空行加!排除取反

sed   '$d'    person.txt 

删除最后一行
sed   '$!d'   person.txt

删除不是最后一行

 

替换

 

文本替换

测试

变量替换

 

这里要用双引号  单引号不执行

# x=oldboy
# y=oldgirl
# sed  "s#$x#$y#g"  person.txt
101,oldgirl,CEO

102,zhangyao,CTO
103,Alex,COO

104,yy,CFO

105,feixue.CIO

反向引用

 

扩展

 

回顾

###awk####

执行过程 按照下面的命令来理解

主要讲不同的模式或者说是条件

 创建环境

 # mkdir -p /server/files

 

#cat>>/server/files/reg.txt<<EOF

Zhang Dandan 41117397 :250:100:175
Zhang Xiaoyu 390320151 :155:90:201
Meng Feixue 80042789 :250:60:50
Wu Waiwai 70271111 :205:80:75
Liu Bingbing 41117483 :250:100:175
Wang Xiaoai 3515064655 :50:95:135
Zi Gege 1986787350 :250:168:200
Li Youjiu 918391635 :175:75:300
Lao Nanhai 918391635 :205:100:175

EOF

 

# awk '/Xiaoyu/' reg.txt  过滤出来

 Zhang Xiaoyu   390320151  :155:90:201

 # awk '/Xiaoyu/{print $1,$2,$3}' reg.txt 花括号前面就是条件或者说模式

 Zhang Xiaoyu 390320151

 精确一点就是

# awk '$2~/Xiaoyu/{print $1,$2,$3}' reg.txt

$2~/Xiaoyu/第二列包含xiaoyu

$0~  ===/Xiaoyu/

 

# awk '$3~/^41/' reg.txt

# awk '$3~/^41/{print $1,$2,$3}' reg.txt

# awk '$3~/[15]$/' reg.txt

# awk '$3~/[15]$/{print $1,$2}'  reg.txt

$0 就是所有列

# awk '{gsub(/:/,"$",$4);print}' reg.txt 

特殊模式BEGIN和GND

 

 

 

i每加1就显示出来 

。。

END 显示最后的结果

awk数组统计

 

 

 

 

 ############

 最终计算

或者用awk中for循环for (pol in h)==pol随便写就是个变量

in就是去哪里  awk循环里h这个位置是数组的名字

会自动打开h成为数组名字

 

 

 

 

以后可以把它当做一个公式用$2用那一列自己选比如说第一列是ip地址

 作业 

awk '/Failed/' secure-20161219 |awk '$11~/[0-9].[0-9].[0-9].[0-9]/{i[$9" "$11]=i[$9" "$11]+1}END{for(ip in i) print ip"\t"i[ip]}'

 

 

 

posted @ 2018-03-21 21:18  寂静深林丶  阅读(261)  评论(0编辑  收藏  举报