簡體   English   中英

bash命令的輸出未存儲在數組中

[英]Output from bash command not storing in array

我下面的代碼非常簡單...我所要做的就是使用IP地址REGEX來查找文件,找到的任何與我的REGEX匹配的IP地址都想存儲在@ array2中。

我知道我的REGEX可以工作,因為ive在linux命令行上對其進行了測試,並且它的工作方式完全符合我的要求,但是當它集成到腳本中時,它只會返回空白。 陣列中應存儲700個IP。

#!/usr/bin/perl
use warnings;
use strict;

my @array2 = `grep -Eo "\"\b[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\"" test1.txt`;
print @array2;

反引號``默認情況下就像雙引號字符串一樣。

因此,您需要轉義反斜杠:

my @array2 = `grep -Eo "\\"\\b[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\"" test1.txt`;

另外,您可以使用單引號的qx以避免任何插值:

my @array2 = qx'grep -Eo "\"\b[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\"" test1.txt';

但是,我建議的方法是完全不使用Shell,而是在perl中執行以下邏輯:

my @array2 = do {
    open my $fh, '<', 'test1.txt' or die "Can't open file: $!";
    grep /\b[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\b/, <$fh>;
};

我真的不會混合bash和perl。 它只是在尋求痛苦。 Perl可以原生完成所有操作。

就像是:

open (my $input_fh, "<", "test.txt" ) or die $!;
my @results = grep ( /\b[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/, <$input_fh> );

但是,這確實需要將文件拖到內存中,這不是最佳選擇-我通常會使用while循環。

反引號內的文本經過雙引號替換。 您需要將反斜杠加倍。

無論如何,從Perl內部運行grep是可疑的。 只需將其插入文本文件並使用Perl查找匹配項即可。

從外部命令檢索輸出的最簡單方法是使用open():

open(FH, 'grep -Eo \"\b[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\" test1.txt'."|")  
my @array2=<FH>;
close (FH);

..盡管我認為Sobrique的想法是這里的最佳答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM