2014-01-13 42 views
1

我在不同的服務器上運行腳本,並希望從對象名稱中獲取env。但對象名稱可能因服務器而異。在不同的服務器 對象名稱:在perl中使用substr來獲取字符串的一部分

QDEV1,QDEV2,QQA1,QQA2,QCERT1,QCERT2,QPROD1,QPROD2. 

不,我想使用SUBSTR得到ENV爲DEV,QA,CERT,PROD。我將對象名稱作爲腳本的條目。

$env = substr($objectname, -4,[3-4]); 
print $env; 

這是在dev env和QA中的QQA1/QQA2中運行時返回DEV1/DEV2。我只需要$ env即可

output(any one of these): DEV or QA or CERT or PROD 

回答

4

您可能只是想使用簡單的匹配。例如:

$objectname =~ /(DEV|QA|CERT|PROD)/; 
print $1; 

如果你只是想獲得的名稱沒有前導Q和尾隨號碼,你可以使用:

$objectname = "QFOO2"; 
$objectname =~ /^Q([^\W\d]+)\d+$/; 
print $1; # prints "FOO" 

或者你可以在變量直接替換,如果你不想其餘的:

$objectname = "QFOO43"; 
$objectname =~ s/^Q([^\W\d]+)\d+$/$1/; 
print $objectname; # prints "FOO" 
+0

我從另一個命令獲取對象名,我將命令的輸出進行分割。我不認爲簡單的比賽會有所幫助。基本上,我想放鬆前面的Q和最後的數字。 – user3164754

+0

@ user3164754,增加了一個如何做到這一點的例子。 – Qtax

+0

我必須再次使用$ objectname。我不能使用上面的代碼作爲在所有的envs上運行的腳本的一部分。讓我解釋一下整個案例 對象名稱是以$ $ objectname =(split/\ s + /,'pgrep -fl objectprocess')[ - 1];'獲得的,所以我需要上面的$ objectname中的$ env。我希望這可以幫助你理解我的要求。我不能直接輸入$ objectname的值。 – user3164754

相關問題