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 仅显示不重复的行
- 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 数组属性和方法
- 浅析Android高斯模糊实现方案
- Android 自定义验证码输入框的实例代码(支持粘贴连续性)
- _countof和sizeof
- Flutter适配深色模式的方法(DarkMode)
- RecyclerView+SnapHelper实现无限循环筛选控件
- 详解Android 8.1.0 Service 中 弹出 Dialog的方法
- 短信收发类无错版JustinIO.cs
- Android快速实现无预览拍照功能
- RecyclerView+PagerSnapHelper实现抖音首页翻页的Viewpager效果
- android中使用react-native设置应用启动页过程详解
- 面试官问我单例模式真的安全吗?我懵逼了
- 详解Android使用CoordinatorLayout+AppBarLayout实现拉伸顶部图片功能
- Android自定义控制条效果
- Android使用MediaPlayer和TextureView实现视频无缝切换
- Android实现静默拍照功能