我试图通过将字符串拆分为数组并使用“/ java”来获取路径来捕获文本文件中的所有路径。
这是我的代码:
logfile = "/home/weblogic/javaapp.txt"
log = Facter::Util::FileRead.read(logfile)
log.each_line do |line|
unless log.nil?
log.each_line do |line|
val = line.split(/ /)
java_path = val.grep(%r!/java!)
java_count += 1
Facter.add("java_known_weblogic_version#{java_count}") do
setcode do
java_path
end
end
这是我的文本文件:
/u01/java/jdk1.7.0_72/jre/bin/java /u01/java/jdk1.7.0_72/bin/java /u01/java/jdk1.7.0_65/jre/bin/java /u01/java/jdk1.7.0_65/bin/java
事实如下:
java_known_weblogic_version1 ["/u01/java/jdk1.7.0_72/jre/bin/java\n"]
java_known_weblogic_version10 []
java_known_weblogic_version11 []
java_known_weblogic_version12 []
java_known_weblogic_version13 ["/u01/java/jdk1.7.0_65/bin/java\n"]
java_known_weblogic_version14 []
java_known_weblogic_version15 []
如何消除[]
并仅返回“/u01/java/jdk1.7.0_65/bin/java”之类的路径?
答案 0 :(得分:1)
Array#grep
返回一个数组。您可能希望join
将其转换为字符串:
java_path = val.grep(%r!/java!).join(',')
要删除字符串末尾的\n
:
java_path = val.grep(%r!/java!).map(&:chomp).join
希望它有所帮助。
答案 1 :(得分:0)
另一种看待这种情况的方法是将val作为一个数组返回,该数组根据您定义的字符(在您的情况下为/)进行拆分。如果你想检查数组中每个位置的值,那么最好的办法就是在数组中的每个元素上调用.each,然后操作匹配的元素。
val = line.split(/ /)
val.each do |element|
java_path = element.match(%r!/java!)
java_count += 1
Facter.add("java_known_weblogic_version#{java_count}") do
setcode do
java_path
end
end
end