如何在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