Ruby 如何使用“src”从“IP路由”命令的输出中选择IP地址

Ruby 如何使用“src”从“IP路由”命令的输出中选择IP地址,ruby,linux,Ruby,Linux,若我在终端上运行下面的命令,它会给出IP地址值 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

若我在终端上运行下面的命令,它会给出IP地址值

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地址。

与重定向无关。在Ruby中,字符串中的反斜杠必须转义。只需将\替换为\\:


与重定向无关。在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