sed或awk用于将模式与先前脚本中的变量进行匹配?

时间:2016-11-22 09:11:23

标签: bash awk sed

继续这个: Matching a pattern with sed and getting an integer out at the same time

从xml文件中的模式中获取数字后,我有一个var_number=some number

在这种情况下

var_number=6

在同一个xml文件中,开发人员应该输入以下行:

NewC_server_list=C_SME_DEV6,C_WEB_DEV6

我需要验证=之后的模式是C_SME_DEV $ {var_number},C_WEB_DEV $ {var_number}

含义两件事:

  1. 那些人正确输入了服务器名称:C_WEB_DEV和C_SME_DEV,
  2. 并且该数字与var_number(在本例中为6)相同
  3. sed还是awk?我担心的是:更短的脚本和速度(这台机器上的CPU分配很低)

2 个答案:

答案 0 :(得分:1)

假设您之前命令中的号码存储在变量myVar中,您可以在perl中执行此类操作。

您也可以直接从命令行运行命令。

#!/bin/bash

myVar=$(perl -nle 'print $1 if /ENV=DEV.*?(\d+)/' file) # stored from your previous question.
# myVar=6  (The value from your previous question)

if (( myVar == $(perl -nle 'print $1 if /.*=C_SME_DEV.*?(\d+)/' file) )) && \
     (( myVar == $(perl -nle 'print $1 if /.*,C_WEB_DEV.*?(\d+)/' file) )); then
     echo "Match found"
fi

答案 1 :(得分:1)

添加我之前对OP上一个问题的回答,该问题与上述问题有关。测试文件:

$ cat file
#Env=DEV2,DEV3,DEV5,DEV6
#Enter your required DEV environment after the ENV= in the next line. 
Env=DEV6
NewC_server_list=C_SME_DEV6,C_WEB_DEV6

解决方案:

$ awk 'sub(/^Env=DEV/,"") && /^[1-9][0-9]?$/ {a=$0;b="NewC_server_list=C_SME_DEV" $0 ",C_WEB_DEV" $0} $0==b {print a}' file
6

由于缺乏更好的知识,它只支持每个文件1个匹配,假设旧的需求数据存在。