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

燧人氏 发布于 2015/04/13 10:25
阅读 581
收藏 0

@皮总 又来找你请教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


加载中
0
皮总
皮总

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

上面 file_ignore.list 是你要忽略的列表,file_list.txt 是你 svn 输出的内容。

燧人氏
燧人氏
因为回复评论长度被限制了,你看我另一个回复。
0
燧人氏
燧人氏

谢谢啦,我直接改成这个就可以了。


echo "${ignore_list[@]}" | grep -q "$file_path" && echo $line >> $diff_ignore_file || echo $line >> $diff_update_file

返回顶部
顶部