码迷,mamicode.com
首页 > 系统相关 > 详细

话.linux三剑客之利刃出鞘

时间:2015-09-18 15:45:09      阅读:286      评论:0      收藏:0      [点我收藏+]

标签:

剑客起源于唐代传奇的中国武侠小说中,他们所使用的兵器的地位是至高无上的,一直也是兵器中的王者,符合了在中国古代社会的地位。今天给大家详细的总结一下linux系统下的利刃兵器:awksedgrep

三剑客介绍(grep、sed、awk)

老三:grep

是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来

# grep 常用选项 
-c #只输出匹配行的计数 
-i #不区分大小写 
-h #查询多文件时不显示文件名 
-l #查询多文件时只输出包含匹配字符的文件名 
-n #显示匹配行及行号 
-s #不显示不存在或无匹配文本的错误信息 
-v #显示不包含匹配文本的所有行 
-E #支持扩展的正则表达式 
-P #调用perl语法正则


老二:sed

对文本的处理很强大,增、删、改、查样样能做

# sed 常用选项 -r #在脚本中使用扩展正则表达式 -n #不打印所有行到标准输出 -i #直接修改文件

老大:awk(带头大哥)

可以理解为一门编程语言,可以自定义变量,有条件语句,有循环,有数组,有正则,有函数

# awk 常用变量 
$n #当前记录的第n个字段,字段间由 FS分隔 
$0 #完整的输入记录 
FNR #同NR,但相对于当前文件 
FS #字段分隔符(默认是任何空格) 
NF #当前记录中的字段数 
NR #当前记录数 
OFS #输出字段分隔符(默认值是一个空格) 
ORS #输出记录分隔符(默认值是一个换行符) 
# awk 常用字符串函数 
sub #匹配记录中最大、最靠左边的子字符串的正则表达式,并用替换字符串替换这些字符串 
gsub #整个文档中进行匹配 
index #返回子字符串第一次被匹配的位置 
substr #返回从位置1开始的子字符串,如果指定长度超过实际长度,就返回整个字符串 
split #可按给定的分隔符把字符串分割为一个数组,默认按当前FS值进行分割 
length #返回记录的字符数 
toupper #可用于字符串大小间的转换,该功能只在gawk中有效 
tolower #可用于字符串大小间的转换,该功能只在gawk中有效 
# awk 常用函数 
srand(x) #x是rand()函数的种子 
int(x) #取整 
rand() #产生一个大于等于0而小于1的随机数

案例使用(有很多种方法,今天我们这里只说三剑客的使用方法)

1.快速取出本机IP?

# grep ifconfig eth0|grep -Po ‘(?<=dr:)\S+‘ 
# sed  ifconfig eth0|sed -rn ‘s#.*r:(.*)  B.*#\1#gp‘ 
# awk  ifconfig eth0|awk -F ‘[ :]+‘ ‘NR==2{print $4}‘

技术分享

2.原始数据格式替换成新数据格式(grep自己无法实现该功能了)

原始数据:
17/Apr/2015:09:29:24 +0800
17/Apr/2015:09:30:26 +0800
17/Apr/2015:09:31:56 +0800
18/Apr/2015:09:34:12 +0800
18/Apr/2015:09:35:23 +0800
19/Apr/2015:09:23:34 +0800
19/Apr/2015:09:22:21 +0800
20/Apr/2015:09:45:22 +0800
期望结果:
2015-04-17 09:29:24+0800
2015-04-17 09:30:26+0800
2015-04-17 09:31:56+0800
2015-04-18 09:34:12+0800
2015-04-18 09:35:23+0800
2015-04-19 09:23:34+0800
2015-04-19 09:22:21+0800
2015-04-20 09:45:22+0800

# sed 

sed -rn ‘s#Apr#04#g;s#^(.*)/(.*)/(....):(.*) (.*)#\3-\2-\1 \4\5#p;‘ test.log sed -rn ‘s#^(.{2})/(.{3})/(.{4}):(.{8}) (.{4})#\3-04-\1 \4\5#p;‘ test.log

# awk 

awk -F ‘[/: ]+‘ ‘{sub(/Apr/,"04");printf("%s-%s-%s %s:%s:%s%s\n",$3,$2,$1,$4,$5,$6,$7)}‘ test.log awk ‘{sub(/Apr/,"04");split($0,array,"[/: ]") ;printf("%s-%s-%s %s:%s:%s%s\n",array[3],array[2],array[1],array[4],array[5],array[6],array[7])}‘ test.log

技术分享

话.linux三剑客之利刃出鞘

标签:

原文地址:http://my.oschina.net/u/2325281/blog/508059

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!