shell 文件中使用sed/cut/grep命令和变量

来源:互联网 发布:网络直播你有什么看法 编辑:程序博客网 时间:2024/05/16 19:22

需求:

从 all-test-suite.xml 文件中查询出对应的配置信息,然后将查询出的信息替换至suite.xml文件中

遇到的问题:

  1. sed命令中包含变量,执行无效果:
    问题现象:在命令行窗口执行 sed -n '/123/p' file.xml没问题,但是写入shell文件中,用sh执行时并无效果。
    根本原因:在sed命令中使用了变量,导致失败。
    解决方法:在sed命令中的变量前后加上单引号,如sed -n '/'$CASE_NUM'/p' $ALL_SUITE 或参考这个文章:在sed中引入shell变量的四种方法

代码:

#!/bin/sh# 判断输入参数是否为空if [ "$1" = "" ];then  echo "Need print case number!"  exit 1fiALL_SUITE=all-test-suite.xmlSUITE_FILE=suite.xmlCASE_NUM=${1}# 从all-test-suite.xml文件中查找需要的信息CASE_NAME=`sed -n '/'$CASE_NUM'/p' $ALL_SUITE | sed -n '1p' | cut -d '"' -f 2`CLASS_NAME=`sed -n '/'$CASE_NUM'/p' $ALL_SUITE | sed -n '2p' | cut -d '"' -f 2`if [ "$CASE_NAME" = "" ];then    echo "Can not find case number from ${ALL_SUITE}"    exit 1fi# 从suite.xml文件中查找需要替换的字符串并替换REPLACE_CASE_NAME=`grep 'test name=' $SUITE_FILE | cut -d '"' -f 2`sed -i 's/'${REPLACE_CASE_NAME}'/'${CASE_NAME}'/g' $SUITE_FILEREPLACE_CLASS_NAME=`grep 'class name=' $SUITE_FILE | cut -d '"' -f 2`sed -i 's/'${REPLACE_CLASS_NAME}'/'${CLASS_NAME}'/g' $SUITE_FILEcat $SUITE_FILE
原创粉丝点击