2017-09-13 8 views
0

は$が_

/ホーム/生産/ AGT/PtpAgent、以下のような文字列が含まれてい

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

、以下のようにラインを持っています.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#.*/(.*?)\.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

パイプを最小化しPERL正規表現で作業するhoffmeisterのアプローチは、 "/"を分割して必要な文字列を取得するために最後の要素を取得するだけでよいはずです。そして、それをパイプの次のフェーズで簡単に渡すことができます。