shell引入配置文件,并循环过滤存在配置文件中的每一项-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

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

a123456678 2016-06-15 14:18:22 1578

``

导出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

Shell Perl
分享到
取消 提交回答
全部回答(1)
  • a123456678
    2019-07-17 19:39:08
    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
    0 0
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题
推荐课程