Regex perl脚本下的执行命令中的Alter$\uu

Regex perl脚本下的执行命令中的Alter$\uu,regex,string,perl,Regex,String,Perl,在我的代码中,有一行如下所示 my $status = `/usr/bin/ps -ef | grep $_ | grep -v grep | awk '{print\$2}'`; 其中$\包含如下字符串 my $status = `/usr/bin/ps -ef | grep $_ | grep -v grep | awk '{print\$2}'`; /主页/制作/agt/PtpAgent.sh 例如,我可以在执行命令中将$输出值更改为“PtpAgent”吗 my $status = `

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

my $status = `/usr/bin/ps -ef | grep $_ | grep -v grep | awk '{print\$2}'`;
其中$\包含如下字符串

my $status = `/usr/bin/ps -ef | grep $_ | grep -v grep | awk '{print\$2}'`;
/主页/制作/agt/PtpAgent.sh

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

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

您可以,我建议您使用s///它默认为$_

s#.*/(.*?)\.sh$#$1#
你也可以

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

我还建议您尽量减少管道,只使用perl进行过滤。它干净多了

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

但是,这只是个人喜好。

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

s#.*/(.*?)\.sh$#$1#
你也可以

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

我还建议您尽量减少管道,只使用perl进行过滤。它干净多了

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

然而,这只是个人偏好。

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

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

当然可以。但是这里的问题是什么,对你不起作用吗?@yacc对我不起作用,我尝试了多个regex模式,但仍然无法获得输出为“PtpAgent”,只提供了一些不起作用的示例。@yacc$\u=~ m/\/(\w+)/这是我在上一次尝试中写的你应该做的:
open(我的$ps\u句柄,'ps-ef')并用perl完成作业,而不是使用grep和awk。当然可以。但是这里的问题是什么,对你不起作用吗?@yacc对我不起作用,我尝试了多个regex模式,但仍然无法获得输出为“PtpAgent”,只提供了一些不起作用的示例。@yacc$\u=~ m/\/(\w+)/这是我在上一次尝试中写的你应该做的:
open(我的$ps\u句柄,'ps-ef')并用perl完成作业,而不是使用grep和awk。