2014-01-13 101 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

相关问题