开发者社区> 问答> 正文

shell引入配置文件,并循环过滤存在配置文件中的每一项

``

导出SVN差异列表

svn log -r $rev1:$rev2 -v \
|egrep '^r[0-9]+ |^s+A |^s+M |^s+D ' \
|awk '{ if($0 ~ /^r/) {rev = $1;} else { if($1 == "M") $1 = "A"; print rev" "$1" "$2; }}' \
|sort -r -t ' ' -k3 -k2 \
|uniq -f1 \
|sort -t ' ' -k1 \
|awk '{print $1":"$2":"$3}' \
|sed "s#:$curr_url/#:$svn_dir/#" \
|egrep "$svn_dir" \
|awk 'BEGIN { print "#revision:A/D/C:src_file[:dest_dir]" } {print}' > $diff_name

上面这一段是SHELL脚本,用来导出SVN不同版本的差异列表。

现在需要补充一个功能,原先功能是导出所有的差异变化表,但是有些差异文件(如配置文件)是不需要更新到生产环境,需要过滤掉。

假设现在有一个file_ignore.list的文件,一行一条,如

/home/www/common/config/db_config.php
/home/www/crond/config/inc_crond.php

代表上面两个文件在导出差异变化时被过滤掉。

现假设:在红底白字(|egrep "$svn_dir" )那部分后得到的结果是:

r8596:A:/home/www/common/config/db_config.php
r8596:A:/home/www/crond/config/inc_crond.php
r8596:A:/home/www/recruitmng/model/recruitmng_dao.class.php
r8596:A:/home/www/crond/crond_save_sms_process_log.php
r8596:A:/home/www/cfg/model/CfgDictionaryItemDao.class.php

添加了过滤功能后,希望得到的结果是:

r8596:A:/home/www/recruitmng/model/recruitmng_dao.class.php
r8596:A:/home/www/crond/crond_save_sms_process_log.php
r8596:A:/home/www/cfg/model/CfgDictionaryItemDao.class.php

展开
收起
a123456678 2016-06-15 14:18:22 2345 0
1 条回答
写回答
取消 提交回答
  • list=(`cat file_ignore.list`) 
    cat file_list.txt|while read line; do 
       file_path=`echo $line|awk -F: '{print $NF}'`
       echo "${list[@]}" | grep -q "$file_path" || echo $line 
    done
    2019-07-17 19:39:08
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Shell 脚本速查手册 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载