如何在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”之类的路径?

Array#grep返回一个数组。 您可能希望将其加入字符串:

 java_path = val.grep(%r!/java!).join(',') 

要摆脱字符串末尾的\n

 java_path = val.grep(%r!/java!).map(&:chomp).join 

希望能帮助到你。

另一种看待这种情况的方法是将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