博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Linux]Shell脚本实现按照模块信息拆分文件内容
阅读量:4145 次
发布时间:2019-05-25

本文共 2943 字,大约阅读时间需要 9 分钟。

示例conf_file文件内容如下

[root@CSDN /home/Sudley/get_conf_info]#cat conf_file
info 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/

你可能感兴趣的文章
Ubuntu Could not open lock file /var/lib/dpkg/lock - open (13:Permission denied)
查看>>
collect2: ld returned 1 exit status
查看>>
C#入门
查看>>
C#中ColorDialog需点两次确定才会退出的问题
查看>>
数据库
查看>>
nginx反代 499 502 bad gateway 和timeout
查看>>
linux虚拟机安装tar.gz版jdk步骤详解
查看>>
python实现100以内自然数之和,偶数之和
查看>>
python数字逆序输出及多个print输出在同一行
查看>>
苏宁产品经理面经
查看>>
百度产品经理群面
查看>>
去哪儿一面+平安科技二面+hr面+贝贝一面+二面产品面经
查看>>
pytorch
查看>>
pytorch(三)
查看>>
ubuntu相关
查看>>
C++ 调用json
查看>>
nano中设置脚本开机自启动
查看>>
动态库调动态库
查看>>
Kubernetes集群搭建之CNI-Flanneld部署篇
查看>>
k8s web终端连接工具
查看>>