2016-04-10 6 views
0

ディレクトリのIPアドレスを再帰的にgrepしようとしています。 私は2つのファイル、onetwo持っている:ここで私は、IPのを取得するためにはgrepを使う方法ですノードchild_processでgrepをbashよりも使用したときの結果が異なります

└┼─$─┤▶ cat one 
test 
192.168.1.2 
192.168.1.1102 
182982 
19829872.28288222.222982 
sqdqssdsqd:12.92822.sldql 
192.168.1.91 

└┼─$─┤▶ cat two 
edezdzedezdezdezd:&&122.12 
&&é& 

ddzez 
efreffe 
np.ip 

を:

└┼─$─┤▶ grep -sRIEoh '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' 
192.168.1.2 
192.168.1.110 
192.168.1.91 
192.99.99.99 

そして、私はchild_processを使用してノードで同じことをやってトリングだ:

var spawn = require('child_process').spawn 
var child 


function puts(error, stdout, stderr) { console.log(stdout,error,stderr); process.exit(); } 
const grep =spawn('grep',['-sRIEoh' ,'[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}','/home/user/test']) 
const uniq = spawn('uniq'); 


grep.stdout.pipe(uniq.stdin); 
grep.stdout.on('data', (data) => { 
    console.log(`stdout: ${data}`); 
}); 

しかし、何らかの理由で結果が異なる...

└┼─$─┤▶ node test.js 
stdout: 192.168.1.2 
192.168.1.110 
19829872.282 
88222.222982 
12.92822 
192.168.1.91 
192.99.99.99 

答えて

1

バックスラッシュが、それはbashで 二重引用符でだほとんどのように、JavaScriptでエスケープ文字として使用され、主な例外にはJavaScriptを有効にし、それがエスケープで使用することができない場合は、 バックスラッシュを削除し、以下を検討することである。

% echo "\y" 
\y 
% node -e "console.log('\y')" 
y 

これは、あなたがgrepので. をエスケープするために使用されているバックスラッシュをエスケープする必要があることを意味します

[0-9]{1,3}\. 

は次のようになります。

[0-9]{1,3}\\. 

フルスポーンライン:

const grep = spawn('grep', ['-sRIEoh', 
    '[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}','/home/user/test']); 
関連する問題