如何在ruby文件中拆分字符串

时间:2014-11-25 15:40:03

标签: ruby

我试图通过将字符串拆分为数组并使用“/ 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”之类的路径?

2 个答案:

答案 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