在Ruby中从shell命令中去除换行符

8

我试图在我的脚本中运行简单的shell命令,但即使使用chomp或chop也无法去掉换行符。

我是否漏掉了什么?

      u=`echo  '#{l}' | cut -d: -f4`.chop()
      p2=`echo '#{l}' | cut -d: -f3`.chop()
      p1=`echo '#{l}' | cut -d: -f2`.chop()
      h=`echo  '#{l}' | cut -d: -f1`.chop()


#     **Cant get newlines to go after p1 and p2 !! ??**
      path="#{p1}/server/#{p2}abc"
      puts path


 Output:
 /usr (p1)
 /server
 /bin (p2) abc 
 Expected Output:
 /usr/server/binabc

有什么建议吗?

根据一些建议,我修改了我的代码:

h, p1, p2, u = l.split /:/
u.strip 
u.chomp

puts u.inspect

输出:"字符串\n"

基本上我之前尝试使用chomp时也遇到了同样的问题。我需要以不同的方式调用chomp或添加任何gem吗?


问题具体在哪里?期望的输出是什么? - Geo
3个回答

14

使用String#strip删除所有包装空格,或使用String#chomp(注意'm')仅删除单个尾随换行符。

String#chop会删除最后一个字符(或\r\n对),如果命令不总是以换行符结尾,则可能很危险。

我认为您的代码无法正常工作,因为结果在输出末尾具有多个换行符\空格。 (如果是这样,那么strip将适用于您。)但是,您可以通过删除对chop的调用,然后使用p uputs u.inspect 查看实际输出中有哪些字符来验证此操作。

另外,请注意,在Ruby中,当调用不带参数的方法时,例如u = foo.chop,省略括号是惯用语。


谢谢 @phrogz。我发布了u.inspect的输出。我仍然遇到同样的问题,难道我没有正确地调用它吗? - codeObserver
@codeObserver 使用 u.chomp 不会有任何效果,因为这是该方法的非变异版本。您需要执行 u.chomp!u = u.chomp.strip.strip! 也是如此。 - Phrogz

5

str.chomp可以移除字符串的换行符。 str.chop只能移除最后一个字符。


2
为什么要在如此简单的事情上调用shell:
h, p1, p2, u = l.split /:/

谢谢,格伦。基本上我还在学习Ruby,并尝试将一些shell脚本移植到Ruby中。因此,作为第一次迭代,我尝试在Ruby结构中本地运行shell命令,然后我会进行一次筛选以清除不必要的内容。 - codeObserver
然后,chomp 就是你想要的。 - glenn jackman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接