2017-09-13 32 views
0

我的代碼中有一條線,如下,

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}'`; 
+0

當然可以。但是,這裏有什麼問題,它不適合你嗎? – yacc

+0

@yacc不適合我,我嘗試多個正則表達式模式,但仍然無法獲得輸出爲'PtpAgent' – MrAZ

+0

提供一些不起作用的示例。 – yacc

回答

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

hoffmeister最小化管道和使用PERL正則表達式的方法會很好,因爲您只需分割「/」並獲取最後一個元素來獲取所需的字符串。然後你可以很容易地通過管道的下一個階段。