【shell脚本】匹配文件中特定的段落

摘要:
自己用shell脚本写了一个匹配文件中特定段落的小程序,现将思路和代码分享如下:实现思路:文件中特定的段落的开始和结束位置必须有相应的标记;首先使用grep找到开始标记和结束标记所在行的行号;计算结束和开始标记之间有多少行;使用grep-A获取开始和结束标记之间的段落;代码如下:#!

自己用shell脚本写了一个匹配文件中特定段落的小程序,现将思路和代码分享如下:

实现思路:

  1. 文件中特定的段落的开始和结束位置必须有相应的标记;
  2. 首先使用grep找到开始标记和结束标记所在行的行号;
  3. 计算结束和开始标记之间有多少行;
  4. 使用grep -A获取开始和结束标记之间的段落;

代码如下:

#!/bin/bash
# getlog.sh
#######################################################
# usage:         sh getlog.sh <filename>[outfilename]
# version:        1.0# author:        cnpirate
# release date:    2012-09-26# contact:        zhaixing@qq.com
#######################################################

if [ "$1" == "--help" ]; then
    echo "usage: sh getlog.sh <filename> [outfilename]"exit 1
fi

if [ "$1" == "" ]; then
    echo "no file input!"
    echo "please use --help for usage."exit 2
fi

if [ ! -f "$1" ]; then
    echo "$1 is not a file!"
    echo "please use --help for usage."exit 3
fi
# the begining flag of the section
BeginFlag="<?xml"# the ending flag of the section
EndFlag="</TestRun>"
declare -i Bnum
declare -i Enum
declare -i nums

# line number of the beginning flag
Bnum=$(grep -n "$BeginFlag" $1 | cut -d: -f1)
# line number of the ending flag
Enum=$(grep -n "$EndFlag" $1 | cut -d: -f1)
# lines between the begining and ending flag
nums=$(($Enum-$Bnum))

# output the result into stdout
if [ "$2" == "" ]; then
    grep -A $nums "$BeginFlag" $1exit 0
fi
# output the result into outfile
grep -A $nums "$BeginFlag" $1 > $2

参考文献:

[1].鸟哥的Linux私房菜-基础篇关于shell脚本的介绍,http://vbird.dic.ksu.edu.tw/linux_basic/0340bashshell-scripts.php

免责声明:文章转载自《【shell脚本】匹配文件中特定的段落》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇【自动部署】服务器自动化操作 RunDeck传奇添加地图与配置参数详解下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

shell脚本(2)-shell脚本语法

一、如何抒写shell脚本 1、shell脚本的命名 名字要有意义,不要以a、b、c、1、2、3这种方式命令,建议以sh结尾,在30个字节内,例如:check_memory.sh 2、shell脚本的格式 shell脚本开头必须指定运行环境以#!这个特殊组合来组成,如:#!/bin/bash指该脚本运行解析由/bin/bash来完成 shell的注释使用#...

linux安装jdk脚本

使用Shell远程给Linux安装JDK  #1.下载JDK(不同版本JDK更换链接即可) wget命令下载的文件会在当前目录下,所以如果在下载前最好先 cd 到想把JDK安装的位置,如果没有,可以先创建相应目录 1 wget --no-check-certificate --no-cookies --header "Cookie: oraclelic...

CentOS Shell 脚本备份和重启 JAR 服务

1、JAR 备份 Shell 脚本shaolinTemple-mobile_backup.sh: #!/bin/sh # author hapday # date 2020-07-27 echo "为备份后的 JAR 文件名添加日期和时间标识:" date +%Y-%m-%d-%H-%M-%S MOBILE_HOME=/usr/local/shaoli...

linux命令(shell脚本、定时任务等)

Shell script(Shell脚本)的工作方式有两种:交互式:用户每输入一条命令,然后Shell立即执行一次;批处理:由用户实现编写好一个完整的Shell脚本,Shell会一次性执行脚本中诸多的命令。 一、服务重启脚本:nohup bash demo.sh & shell环境变量设置,更多参考:https://www.cnblogs.com...

vim中执行shell命令

1):!command   不退出vim,并执行shell命令command,将命令输出显示在vim的命令区域,不会改变当前编辑的文件的内容   例如   :!ls -l   特别的可以运行:!bash来启动一个bash shell并执行命令,不需要退出vim   2):r !command     将shell命令command的结果插入到当前行的下一行...

shell遍历文件目录,监听文件变化,拼接字符串

最近利用业余时间学习了shell 并做了个例子 实现的功能是 : 监听demo文件夹下的文件,只要新增了  .js的文件就把对应的文件名重组,拼接, 最后写入到demo.js里面. 文件结构如下 : demo.sh代码如下 while : ; do if [ -f oldfiles.log ] then #按照时间排序 并取第一行 就是最...