本文共 2943 字,大约阅读时间需要 9 分钟。
示例conf_file文件内容如下
[root@CSDN /home/Sudley/get_conf_info]#cat conf_fileinfo start==name:ltaddress:Northphone:10086tx.rpm info end== info start==#nothing info end== info start==name:ydaddress:Southphone:10010al.rpm info end==
conf_file文件包含module_1、module_2、module_3,module_2没内容,编写脚本将conf_file文件拆分为module_1、module_3两个模块(module_2没内容,不做处理)
代码实现:#!/bin/bash# Author:Sudley# ctime: 2020-05-31get_conf_info(){ conf_file="$1" flag="$2" if [ ! -f "${conf_file}" ] || [[ -z "${flag}" ]];then echo "argument error" echo "usage:" echo " ./get_conf_info.sh conf_file flag " fi print_flag=false while read line do #无视注释的行 echo "${line}" | grep "^ *#.*" > /dev/null 2>&1 && continue if [[ "${line}" =~ "${flag} start==" ]];then module_name=$(echo "${line#<}"|awk -F '>' '{print $1}') print_flag=true continue fi if [[ "${line}" =~ "${flag} end==" ]];then print_flag=false continue fi if [ "${print_flag}" = true ];then echo "${line}" >> "${WORKSPACE}/${module_name}" fi done < "${conf_file}"}get_address_rpms(){ label="address" grep "${label}" "${WORKSPACE}" -rn |awk -F : '{print $1}' >> "${WORKSPACE}/module.list" while read module do grep ".*\.rpm$" "${module}" done < "${WORKSPACE}/module.list"}export BASE_DIR=`pwd`export WORKSPACE="${BASE_DIR}/workspace_t"[[ -d "${WORKSPACE}" ]] && rm -rf "${WORKSPACE}"mkdir -p "${WORKSPACE}"get_conf_info "$1" "$2"get_address_rpms
脚本用法演示:
当模块数量较多时使用上面方法先拆分模块在查找相关数据效率会比较低,可以直接使用sed读取各个模块的信息,如下#!/bin/bash# Author:Sudley# ctime: 2020-05-31get_conf_info(){ conf_file="$1" flag="$2" if [ ! -f "${conf_file}" ] || [[ -z "${flag}" ]];then echo "argument error" echo "usage:" echo " ./get_conf_info.sh conf_file flag " fi module_list="$(grep "${flag} start==" "${conf_file}" | awk -F '<' '{print $2}' | awk -F '>' '{print $1}')" [[ -n "${module_list}" ]] && for module in ${module_list} do #echo "${module}" if sed -n "/<${module}> ${flag} start/,/<${module}> ${flag} end/ p" "${conf_file}" | grep "address" > /dev/null 2>&1;then sed -n "/<${module}> ${flag} start/,/<${module}> ${flag} end/ p" "${conf_file}" | grep ".*\.rpm$" fi done}export BASE_DIR=`pwd`export WORKSPACE="${BASE_DIR}/workspace_t"[[ -d "${WORKSPACE}" ]] && rm -rf "${WORKSPACE}"mkdir -p "${WORKSPACE}"get_conf_info "$1" "$2"运行结果一样但是效率快了将近一倍,当模块数量很多时节约的时间还是很可观的。
转载地址:http://ruiti.baihongyu.com/