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


    自己用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" $1
        exit 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

  • 相关阅读:
    java。equal()和== 的区别
    java。封装
    java。OOA,OOD,OOR
    java。类和对象
    java、数组;堆区,栈区
    java。 break和continue区别
    NYOJ 228 士兵杀敌(五)【差分标记裸题】
    2017CCPC 杭州 J. Master of GCD【差分标记/线段树/GCD】
    CF1025B Weakened Common Divisor【数论/GCD/思维】
    网络流算法笔记
  • 原文地址:https://www.cnblogs.com/cnpirate/p/2704280.html
Copyright © 2020-2023  润新知