【发布时间】:2016-01-08 15:09:09
【问题描述】:
我使用的是 Ruby 1.8.7。我有一个包含以下内容的文本文件:
"testhost-01.test.de|lan|ip-v4|cmk-agent|tcp|ip-v4-only|site:tir_projects|test|wato|/" + FOLDER_PATH + "/",
"testhost-02.test.de|lan|ip-v4|cmk-agent|tcp|ip-v4-only|site:tir_projects|prod|puppetagent|wato|/" + FOLDER_PATH + "/",
"testhost-03.test.de|wan|ip-v4|cmk-agent|tcp|ip-v4-only|site:tir_projects|prod|puppetagent|wato|/" + FOLDER_PATH + "/",
"testhost-04.test.de|ip-v4|cmk-agent|tcp|ip-v4-only|site:tir_projects|dmz|prod|puppetagent|wato|/" + FOLDER_PATH + "/",
"testhost-05.test.de|wan|ip-v4|cmk-agent|tcp|ip-v4-only|site:tir_projects|prod|puppetagent|wato|/" + FOLDER_PATH + "/",
"testhost-06.test.de|lan|ip-v4|cmk-agent|tcp|ip-v4-only|site:tir_projects|prod|wato|/" + FOLDER_PATH + "/",
"testhost-07.test.de|ip-v6|cmk-agent|tcp|site:tir_projects|ip-v6-only|dmz|prod|puppetagent|wato|/" + FOLDER_PATH + "/",
"testhost-08.test.de|ip-v4|snmp|snmp-only|ip-v4-only|critical|site:tir_projects|dmz|wato|/" + FOLDER_PATH + "/",
我正在尝试将主机名 (testhost-01.test.de - testhost-08.test.de) 提取到一个数组中,但前提是 "puppetagent" 在同一行中。
结果应该是:
[
"testhost-02.test.de",
"testhost-03.test.de",
"testhost-04.test.de",
"testhost-05.test.de",
"testhost-07.test.de"
]
代码示例:
path = "Textfile"
file = IO.read(path)
nodes = file.scan(/^"(.*)\|lan.*\|puppetagent/).flatten
上面的这个例子只适用于第一个管道之后的行,
"lan" 紧随其后,所以它只找到主机 02。
【问题讨论】:
-
非常感谢 Kristján。效果很好。
-
我强烈建议尽快从 Ruby 1.8.7 迁移。它已经过时了;继续使用它只会导致问题。查看 RVM 和 rbenv 了解如何在系统上管理多个 Ruby 版本。
标签: ruby regex ruby-1.8.7