文档章节

Shell提取日志文件指定关键词之间的段落,且包含指定内容

Jamie-Liu
 Jamie-Liu
发布于 2016/11/11 10:13
字数 268
阅读 797
收藏 1

有时候类似于这样的日志:

A

12345

B

A

sadasfd

B

A

12345
asfdsa

B


想要把从A开始,到B结束,中间包含“12345”的段落取出来,得到下面的结果:

A

12345

B


A

12345
asfdsa

B

怎么办呢?请看脚本(脚本中是逐行读取日志文件):

 

#!/bin/bash
start_key="A"    # 段落开始标识
keyword="12345"    # 段落之间包含的关键词
end_key="B"    # 段落结束标识
logfile="/tmp/log.txt"   #  日志文件
filename="/tmp/result.txt"    # 提取内容保存文件
tmpfile="/tmp/tmpfile.txt"   # 临时文件(过渡文件)

rm -f $filename $tmpfile

cat $logfile | while read line
do
    if [ -s "$tmpfile" -a "$line " != "$start_key" ];then
        if [ "$line" != "$end_key" ];then
            echo "$line" >> $tmpfile
        else
            if [ `cat $tmpfile | grep -c "$keyword"` -ne 0 ];then
                cat $tmpfile >> $filename
                echo -e "${end_key}\n" >> $filename
            fi
            rm -f $tmpfile
        fi
    fi
    if [ ! -s "$tmpfile" ];then
        if [ "$line" == "$start_key" ];then
            echo "$line" >> $tmpfile
        fi
    fi
done

 

    脚本运行结果如下:

© 著作权归作者所有

共有 人打赏支持
Jamie-Liu
粉丝 2
博文 18
码字总数 12142
作品 0
宜昌
私信 提问
2-3 搜索引擎工作原理简介

搜索引擎的工作过程大体上可以分成三个阶段: 1、爬行和抓取:搜索引擎蜘蛛通过跟踪链接访问网页,获得页面HTML代码存入数据库。 (1)蜘蛛 搜索引擎用来爬行和访问页面的程序被称为蜘蛛,也...

SEO菲羽
2017/06/21
0
0
[git学习:Pro git(2)]Git基础

Getting a Git Repository(取得项目的Git仓库) 一在工作目录中初始化新仓库: git init 初始化后,在当前目录下会出现一个名为.git的目录,所有Git需要的数据和资源都存放在这个目录下不过...

SibylY
2015/03/08
91
0
Linux Shell脚本攻略 读书笔记

Linux Shell脚本攻略 读书笔记 这是一本小书,总共253页,但内容却很丰富,书中的示例小巧而实用,对我这样总是在shell门前徘徊的人来说真是如获至宝; 最有价值的当属文本处理,对这块我单独...

小股儿
2014/01/06
148
0
nodejs实现一个word文档解析器

动机 之前项目里遇到一个需求,需要前端上传一个word文档,然后后端提取出该文档的指定位置的内容并保存。这里后端用的是nodejs,开始接到这个需求,发现无从下手,主要是没有处理过word这种...

超级索尼子
08/13
0
0
每天一个linux命令(45):grep 命令

Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是...

姬风
2014/04/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

设计模式之工厂模式

本篇博文主要翻译这篇文章: https://www.journaldev.com/1392/factory-design-pattern-in-java 由于翻译水平有限,自认为许多地方翻译不恰当,欢迎各位给出宝贵的建议,建议大家去阅读原文。...

firepation
1分钟前
0
0

中国龙-扬科
4分钟前
0
0
简单谈谈vue的过渡动画

在vue中,实现过渡动画一般是下面这样: `<``transition` `name``=``"fade"``>``<``div``></``div``>``</``transition``>` 用一个transition对元素或者组件进行封装. 在过渡的时候,会......

嫣然丫丫丫
10分钟前
0
0
文件及目录处理

file_get_contents file_put_contens fopen r/r+ 只读打开,指针开头 w/w+ 写入打开,指针开头,清空文件,不存创建 a/a+ 追加打开,指针末尾,不存创建 x/x+ 创建模式打开 b 二进制打开 t 文本打开...

关元
12分钟前
0
0
如何在Angular中使用better-scroll插件

由于需要在一个固定的的高度做无限滚动,本来css的overflow-y也可以完成的,奈何安卓不是很流畅,还很生硬,就是用了第三方库better-scroll,配合angular的ng-content。angular的ng-content和...

前端攻城老湿
18分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部