2016-11-22 52 views
-2

在此延續: Matching a pattern with sed and getting an integer out at the same timesed或awk是否與前一個腳本中的變量匹配模式?

已經得到了在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. 而且該NUM ber與var_number相同(在本例中爲6)

sed或awk?我的擔憂是:較短的腳本和速度(CPU在這臺機器上的分配很低)

+1

你有試過自己寫點東西嗎?如果是,請向我們展示一些您的代碼。 –

+0

如果驗證成功/失敗,應該輸出什麼內容?另外,文本是在下一行還是在文件的任何地方? –

+0

向我們展示您之前嘗試的內容。提示:要在awk命令中聲明變量,請使用以下語法'awk -v myVar =「abc」'/ * awk script * /'myfile'。另外,我敢肯定你可以在一個awk腳本中做你想做的事情。 – Aserre

回答

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個匹配假設的新要求數據舊後存在。

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