Linux 下用bash shell正则表达式批量处理文件的应用实例

代码文件头有版本信息,下面一段shell脚本就是用来收索和更新代码头注释里面的斑斑信息的。

从中可以到shell脚本中以下几个小技术点是如何运用的:

1. 利用正则表达式分组匹配指定内容

2. 字符串的定位,截断和拼接处理

3. 指定文件指定行替换指定内容

 

#!/bin/sh

#two input parameters:
#$1---folder name
#$2---eco number

if [[ $# -lt 2 ]]; then
  echo "missing command input parameters"
  exit 1
fi

for file in `ls $1/*.[pi]`
do
  exec < $file
  regex='.+(Revision [eE]nd).+'
  x=1
  laststr=''
  beforestr=''
  newversion=''
  isfind='no'

  while read line
  do
    if [[ "$line" =~ $regex ]]; then
      isfind='yes'
      break;
    fi
    let x++
    beforestr=$laststr
    laststr="$line"
  done

  if [[ $isfind != 'yes' ]]; then
    echo "Didn't handle $file"
    continue;
  fi

  regex='Revision/:/s+([0-9|/.]+).+'
  if [[ "$beforestr" != '' ]]; then
    if [[ "$beforestr" =~ $regex ]]; then
      lastversion=${BASH_REMATCH[1]}


      #Generate next version
      while [[ `expr index "$lastversion" .` -ne 0 ]]
      do
        temp=${lastversion:0:`expr index "$lastversion" .`}
        newversion="${newversion}$temp"
        lastversion=${lastversion:`expr index "$lastversion" .`}
      done
      lastversion=`expr $lastversion + 1`
      newversion=${newversion}$lastversion
    fi
  fi

  regexeco='ECO/:/s*(/*[a-z|A-Z|0-9| ]*/*)/s+/*//'
  if [[ "$laststr" != '' ]]; then
    cline="`expr $x - 1`s"
    if [[ "$laststr" =~ $regex ]]; then
      oldversion=${BASH_REMATCH[1]}


      #Replace new version here
      sed -i "$cline/$oldversion/$newversion/g" $file
    fi

    if [[ "$laststr" =~ $regexeco ]]; then
      oldeco=${BASH_REMATCH[1]}
      neweco="*${2}"
      sed -i "$cline/$oldeco/$neweco/" $file
    fi
  fi
done

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值