sed uniq sort 实例
sed
先来一段小日志,这只是一部分日志。
#!/bin/bash
#sip=`cat * | awk '{print $2}' | awk -F "'" '{print $2}' | sort | uniq | wc -l`
#host=`cat * | awk -F '----' '{print $2}' | awk '{print $2}' | sort | uniq | wc -l`
#uri=`cat * | awk '{print $4}' | awk -F "'" '{print $2}' | sort | uniq | wc -l`
#echo "sip: $sip"
#echo "host: $host"
#echo "uri:$uri"
dir=/data/log/userdata/data/app
cd $dir
cat * > count_app.log
'sip': '100.114.190.205'----'host': daikuan.2345.com----'uri': '/image?phone=18574419525'
00.104.2.23'----'host': 91jinjindai.com----'uri': '/m2/js/common.js'
'sip': '100.104.2.23'----'host': 91jinjindai.com----'uri': '/m2/js/cookie.js'
'sip': '100.104.2.23'----'host': 91jinjindai.com----'uri': '/m2/js/jquery.smartmarquee.js'
'sip': '100.104.2.23'----'host': 91jinjindai.com----'uri': '/m2/images/oct/banner.png'
'sip': '100.104.2.23'----'host': 91jinjindai.com----'uri': '/m2/images/oct/fu1.png'
'sip': '100.104.2.23'----'host': 91jinjindai.com----'uri': '/m2/images/oct/fu4.png'
'sip': '100.104.2.23'----'host': 91jinjindai.com----'uri': '/m2/images/oct/touzi.png'
'sip': '100.104.2.23'----'host': 91jinjindai.com----'uri': '/m2/images/oct/yuan2.png'
'sip': '100.104.2.23'----'host': 91jinjindai.com----'uri': '/m2/images/oct/yuan1.png'
1、删除与日志不相关的内容
观察发现,日志都是以 ‘sip’ 开头
先删除包含#的行:sed -i ‘/#/d’ test.log
为了验证修改后的效果,我们可以先看下一共有多少行:
删除包含#的行后,看看还剩多少行:
可以看出少了100多行
删除其他的行:
sed ‘/sip/!d’ test.log
其实一开始便可以使用这个命令来删除其他不是日志的行
2、只留下ip,host,uri三列,其余均不要
先去掉引号,删除引号我们可以理解为将文件中的所有的引号替换为空
单引号均替换成空了,这里需要注意:之前是用单引号将全部替换命令
去掉冒号:
可以看到,所有的冒号均已删除
删除-
删除sip,host,uri
这里使用-e,可以使用多个规则,发现sip,host,uri等替换成了—-,再次删除即可
删除完成后的日志效果为:
如何觉着之间有空格的话,可以删除空格:
sed ‘s/[[:space:]]//g’ test.log
3、对日志内容做统计
统计日子的话可以用到grep sort uniq awk等命令
4、在指定内容下添加某一行
日志文件:
spring:
jpa:
show-sql: true
data:
mongodb:
uri: mongodb://tianchi:123456@mongodb.backend.com:27017/tianchi_sys
custom:
connections-per-host: 300
socket-timeout: 0
max-wait-time: 25000
connect-timeout: 10000
threads-allowed-to-block-for-connection-multiplier: 10
redis:
host: redis.backend.com
port: 19736
cloud.inetutils.ignored-interfaces: lo.*
在port: 19736下添加一行字段,设置redis密码:
sed "/port: 19736/a password: 111111111" test.yml
在指定内容上插入一行字段,则使用
sed "/port: 19736/i password: 111111111" test.yml
在每一行的行首添加字符
# sed 's/^/HEAD&/g' 1.txt
HEADaaaaa
HEADbbbbb
HEADccccc
在每一行的行尾添加字符
# sed 's/$/&TAIL/g' 1.txt
aaaaaTAIL
bbbbbTAIL
cccccTAIL
在匹配内容的行首加字符
# sed 's/^a/HEAD&/g' 1.txt
HEADaaaaa
bbbbb
ccccc
# sed -i 's/.*swap.*/#&/' /etc/fstab
cat /etc/fstab
#/dev/mapper/centos-swap swap swap defaults 0 0
sort
sort可以对文件进行排序,如果不加参数,则默认按照升序输出
sort -u,可以直接去除重复的行:
这里便是按照字母的排序
可以看到重复的行已经去掉
sort -r 降序排序
有时候我们使用sort进行排序的时候,需要重定向到一个新的文件,如果重定向源文件会出现被清空的现象,这个时候使用 -o 选项可以解决
看到原文件被清空,使用 -o试试
sort -n 以数值排序,例如有时候10比2小的情况
接下来的选项会是非常有用和常见的:
-t -k
如果不指定,默认是排序第一列
使用-k指定特定的列,这里默认是认为列与列之间默认的分隔符是空格
使用-t指定分隔符,比如说列与列之间有冒号,有空格这时候-t就发挥作用了
uniq:
uniq只需要掌握常见的几个参数就可以了
-c 在输出行前面加上每行出现的重复次数
-d 仅显示重复行
-u 仅显示不重复的行
- Java魔法堂:String.format详解
- Java基础12 类型转换与多态
- linux(七)之linux系统中查找文件
- apache配置多站点
- linux(六)之文本操作
- Java基础11 对象引用
- maven 3.3.9 for windows 配置
- JS魔法堂:再次认识Function.prototype.call
- MySQL(六)之MySQL常用操作符
- 无人驾驶的基本算法及简单介绍
- CentOS6.5安装Java 8以及Tomcat8
- Java基础06 组合
- 警告:MySQL-server-5.6.21-1.linux2.6.x86_64.rpm: 头V3 DSA/SHA1 Signature, 密钥 ID 5072e1f5: NOKEY
- MySQL(五)之DDL(数据定义语言)与六大约束
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Python3下基于Scapy库完成网卡抓包解析
- pandas:解决groupby().apply()方法打印两次
- pandas:字段值插入数据表第一行的解决办法
- Recommending items to more than a billion people(面向十亿级用户的推荐系统)
- pandas:对字符串类型做差分比较
- pandas:由列层次化索引延伸的一些思考
- 远程过程调用 Java RMI 技术 远程控制
- Real-time Xenomai 3 example 1
- Electron 常见问题收录II
- SQL性能调优技巧
- Linux查看CUDA版本以及cudnn版本号
- 数据结构算法操作试题(C++/Python)——最长有效括号
- 数据结构算法操作试题(C++/Python)——两两交换链表中的节点
- 数据结构算法操作试题(C++/Python)——最大子序和
- 数据结构算法操作试题(C++/Python)——四数之和