2016-04-10 14 views
0

'dan daha fazla kullanıyorum. Bir dizindeki ip adresleri için yinelemeli olarak grep çalışıyorum. Ben ip almaya çalıştığım grep nasıl kullandıklarınıFarklı sonuç, child_process ile grep'i bash

İşte
└┼─$─┤▶ 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 

var: İki dosya, one ve two sahip

└┼─$─┤▶ 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 

Ve child_process kullanarak düğümünde aynı şeyi tring ediyorum:

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}`); 
}); 

Ancak sonuç bazı nedenlerden dolayı farklıdır ...

└┼─$─┤▶ 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 

cevap

1

ters eğik o Bash çift tırnak var neredeyse gibi, JavaScript bir kaçış karakteri olarak kullanılır, ana istisna JavaScript bir kaçış içinde kullanılamaz eğer, ters eğik çizgi kaldırmak aşağıdakileri dikkate olmasıdır:

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

olmalıdır:

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

Bu Eğer grep içinde . kaçmak için kullanılan ters eğik çizgi kaçış gerekecektir anlamına gelir

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

tam spawn hattı:

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