前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >sed uniq sort 实例

sed uniq sort 实例

作者头像
dogfei
发布2020-07-31 13:25:53
1.2K0
发布2020-07-31 13:25:53
举报
文章被收录于专栏:devops探索devops探索

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 仅显示不重复的行

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-03-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • sed
  • sort
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档