在perl脚本下更改执行命令中的$ _

时间:2017-09-13 16:07:50

标签: regex string perl

在我的代码中有一行如下,

my $status = `/usr/bin/ps -ef | grep $_ | grep -v grep | awk '{print\$2}'`;

哪个$ _包含如下字符串,

  

/home/production/agt/PtpAgent.sh

我可以在执行命令中将$ _输出值更改为'PtpAgent',例如,

my $status = `/usr/bin/ps -ef | grep <some_regex_pattern>$_<some_regex_pattern> | grep -v grep | awk '{print\$2}'`;

2 个答案:

答案 0 :(得分:1)

你可以,我建议你使用默认为$ _

的s ///
s#.*/(.*?)\.sh$#$1#

您也可以

$_=~s#.*/(.*?)\.sh$#$1#;

$_="some text";

我还建议您将管道保持在最低限度,并使用perl进行过滤。它更清洁

my $status = qx(/usr/bin/ps -ef ) ;
$status=~s/.*\n.*?(grep.*?)\n.*/$1/m;  #adjust the capture group accordingly

然而,这仅仅是个人偏好。

答案 1 :(得分:1)

hoffmeister最小化管道并使用PERL正则表达式的方法会很好,因为您只需要拆分“/”并获取最后一个元素来获取所需的字符串。然后,您可以轻松地将其传递给管道的下一个阶段。