2014-02-24 37 views
-1

我正在使用perl腳本,在這個腳本中我將運行命令並獲得如下輸出:your id is <895162>。我將存儲該字符串,並僅從該字符串讀取數字。問題是我的主命令將使用來自perl的系統命令在shell中運行。在perl中複製輸出並從中提取數字

,如:

#ids.csh is "echo your id is <1123221>" 
my $p = system ("./ids.csh 2>&1 > /dev/null"); 
print "$p\n"; 
$p =~ s/[^0-9]//g; 

但輸出不復制到$ P檔,如果我錯了?

回答

2

system運行命令但不捕獲它。對於這一點,你要qx /反引號:

my $p = `./ids.csh 2>/dev/null`; 

至於萊恩賈菲說,你可能想扔掉stderr輸出(而不是將其顯示到屏幕或其它地方的標準錯誤是怎麼回事),而不是標準輸出(即包含您想要捕獲的消息)。

請注意,當qx失敗時,由於幾種不同的原因可以這樣做,並且構建有意義的錯誤消息並不是微不足道的。如果遇到問題,請考慮使用IPC::System::Simple的capture()。

+0

現在這個命令打印'./ids.csh 2>/dev/null'作爲輸出,我試着用系統,然後它打印回波線,但是沒有把它複製到$ p和$ p值是0,如果我打印它。 – user2828488

+1

然後你沒有使用反引號,你用單引號。反推鍵通常與鍵盤上的鍵相同。或者你可以執行'my $ p = qx!./ ids.csh 2>/dev/null!;(明確地指定qx讓你選擇你想要的任何分隔符)。 – ysth

2

您已將所有輸出重定向到/dev/null,這意味着您的所有輸出都將被丟棄。

我想你大概的意思是:

./ids.csh 2>/dev/null 

這將stderr重定向到/ dev/null的同時保持標準輸出不變。

+0

謝謝,但我想將結果存儲到$ p,讓我說我的ids.csh只是'echo「我的名字是toby1234」'所以當我運行這個文件時它會給出輸出'我的名字是toby1234 '我想把它存儲在$ p中,然後我將從中提取數字。 對不起,不好解釋 – user2828488

+1

儘管系統()和反引號之間的區別,重定向您的輸出到/ dev/null意味着回聲語句的結果將永遠不會看到。 –