文档章节

话.linux三剑客之利刃出鞘

熊大熊二
 熊大熊二
发布于 2015/09/18 13:45
字数 977
阅读 103
收藏 1

剑客起源于唐代传奇的中国武侠小说中,他们所使用的兵器的地位是至高无上的,一直也是兵器中的王者,符合了在中国古代社会的地位。今天给大家详细的总结一下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

本文转载自:http://www.jcore.cn

共有 人打赏支持
熊大熊二
粉丝 16
博文 31
码字总数 29359
作品 0
东城
程序员
私信 提问
“Linux安全运维三剑客“被全国300所高等院校图书馆收藏

认准当当自营店:Linux安全运维三剑客 李晨光业内重磅作品:《Linux企业应用案例精解》、《UNIX/Linux网络日志分析与流量监控》、《开源安全运维平台OSSIM最佳实践》被誉为Linux安全运维三剑...

李晨光
2018/06/21
0
0
Docker容器云架构师年薪最低80万!阿里开出150万年薪不限学历!

先来看一则腾讯的招聘: [腾讯-北京] 容器云开发高级工程师(Docker/Kubernetes/…) 腾讯云是腾讯在公有云 /私有云上的重要布局,是目前重点发展的部门之一,小马哥也为此站台了,极有前景。随...

李金泽
2018/04/12
0
0
开放的 Web 3D 绘图技术 - WebGL

WebGL是一个开放的Web 3D技术,WebGL不需要在浏览器安装插件,只要浏览器支持WebGL技术你就可以用 Javascript 进行编程. 区别于现在的Flash Player(2D)和Unity Player(3D). 这些浏览器包括 Ch...

eechen
2012/10/06
0
4
linux常用命令

1、 帮助命令 man:外置命令时用man显示帮助信息 help:内置命令时用help显示帮助信息 注意:一个命令是否为内置可以用enable+命令进行查看 2、 文件和目录操作命令 mv:移动目录或者文件,也...

liucd12
2017/11/17
0
0
Linux_Linux命令总结01

mkdir单个或者批量创建多个目录(常用参数:-p递归创建目录) touch创建单个或者批量创建多个文件 cp拷贝文件或目录(常用参数:-p保持属性 -a或-r拷贝目录) mv移动或剪切文件或目录,也可改...

Mr_LiuT
2017/11/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Hibernate SQLite方言

以下代码有参考过github上国外某位大佬的,在发文的最新稳定版Hibernate上是可用的,有时间再仔细分析一下 import org.hibernate.dialect.Dialect;import org.hibernate.dialect.function.S...

CHONGCHEN
今天
3
0
CentOS 7 MariaDB搭建主从服务器

本文编写环境为CentOS7。确保关闭SELinux,关闭防火墙或者防打开指定端口。具体信息如下 #master[root@promote ~]# cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) [r...

白豆腐徐长卿
今天
10
0
介绍python中运算符优先级

下面这个表给出Python的运算符优先级,从最低的优先级(最松散地结合)到最高的优先级(最紧密地结合)。这意味着在一个表达式中,Python会首先计算表中较下面的运算符,然后在计算列在表上部...

问题终结者
今天
3
0
Spring Boot 2.x基础教程:快速入门

简介 在您第1次接触和学习Spring框架的时候,是否因为其繁杂的配置而退却了?在你第n次使用Spring框架的时候,是否觉得一堆反复黏贴的配置有一些厌烦?那么您就不妨来试试使用Spring Boot来让...

程序猿DD
昨天
10
0
SpringSecurity认证流程源码级详解

SpringSecurity认证流程源码级详解 认证流程说明 认证结果如何在多个请求之间共享 获取认证用户信息

chendom
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部