簡體   English   中英

以零格式打印紅寶石數組

[英]Printing a ruby array with zero formatting

我有以下代碼來構成IP地址數組,並且只打印出與模式匹配的一個。

ip_address = node.network.interfaces.map { |p, f| f[:addresses].keys }.flatten.delete_if{|x| x =~ /(.*):(.*)/ }.grep(/127/)

我正在嘗試將該IP地址寫入這樣的配置文件

  bind "#{ip_address}:22002 ssl crt /etc/ssl/certs/wildcard.example.com.pem"

輸出:

  bind ["127.0.0.1"]:22002 ssl crt /etc/ssl/certs/wildcard.example.com.pem

如何在沒有引號和括號的情況下將此值正確寫入文件?

  bind 127.0.0.1:22002 ssl crt /etc/ssl/certs/wildcard.example.com.pem

我已經嘗試過將它們替換掉,但這對我沒有用。

您會得到“引號和方括號”,因為grep返回一個數組。 要解決此問題,您可以打印一個元素:(請參見mudisobwa的評論

bind "#{ip_address.first}:22002 ssl crt /etc/ssl/certs/wildcard.example.com.pem"

或者,您可以更改代碼以僅返回與模式匹配的第一個地址:

ip_addresses = node.network.interfaces.flat_map { |_, f| f[:addresses].keys }
ip_address = ip_addresses.find { |x| x !~ /(.*):(.*)/ && x =~ /127/ }

並通過以下方式打印:

bind "#{ip_address}:22002 ssl crt /etc/ssl/certs/wildcard.example.com.pem"

我總是希望地址的格式為10.0.128|129|0.* 實際上,我正在做的就是我的正則表達式。 grep(/10.0.(128|129|0).*/)

您必須轉義點( \\. )或將其放入字符類( [.] )。 否則,一個. 將匹配任何字符 此外,還應該匹配字符串的開始( ^ )和結束( $ ),以避免匹配210.0.0.1 更可靠的Regexp可能如下所示:

/^10\.0\.(128|129|0)\.\d{1,3}$/

另外,還有Ruby的IPAddr

require 'ipaddr'

valid_ips = [
  IPAddr.new('10.0.0.0/24'),
  IPAddr.new('10.0.128.0/24'),
  IPAddr.new('10.0.129.0/24')
]

valid_ips.any? { |net| net.include? '127.0.0.1' }  #=> false
valid_ips.any? { |net| net.include? '10.0.128.1' } #=> true
valid_ips.any? { |net| net.include? '8.8.8.8' }    #=> false

暫無
暫無

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

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