2017-06-30 6 views
0

を使用して `IP route`コマンドの出力からIPアドレスを選択することができ、私は、端末上でコマンドの下に実行する場合は、IPアドレスの値にどのように私は「SRC」

ip route get 8.8.8.8 | grep -oP '(?<=src)(\d{1,3}.){4}' 

しかし、私はと同じコマンドを実行を与えます「2> & 1」が、それは空の文字列を返します。

output = '' 
IO.popen("ip route get 8.8.8.8 | grep -oP '(?<=src)(\d{1,3}.){4}' 2>&1", 'r+') do |f| 
    output = f.read.strip 
end 
puts output.inspect 

シナリオの上に理解するために私を導いてください。 IPアドレスを取得するために追加する必要がある変更。

+0

応用試合を(?<= SRC)(\ dの{1,3}。)コマンドの出力に{4}メソッドのIPルート8.8.8.8を取得します "。 – kd12

答えて

2

リダイレクトとは関係ありません。 Rubyでは、文字列のバックスラッシュをエスケープする必要があります。ただ、\\\を置き換える:正規表現と

output = '' 
IO.popen("ip route get 8.8.8.8 | grep -oP '(?<=src)(\\d{1,3}.){4}' 2>&1", 'r+') do |f| 
    output = f.read.strip 
end 
puts output.inspect