【发布时间】:2016-02-02 14:02:21
【问题描述】:
我想使用 Ruby 的 $INPUT_RECORD_SEPARATOR 又名 $/ 来操作制表符分隔的文件。
输入文件如下所示(大体简化):
a b c
(值由制表符分隔)。
我想得到以下输出:
a---
b---
c---
我可以通过使用ruby -e 并设置$INPUT_RECORD_SEPARATOR 别名$/ 轻松实现这一点:
cat bla.txt | ruby -e '$/ = "\t"; ARGF.each {|line| puts line.chop + "---" }'
这行得通,但我真正想要的是:
cat bla.txt | ruby -n -e '$/ = "\t"; puts $_.chop + "---" '
但是,这会打印:
a b c---
显然,它没有使用提供的分隔符——大概是因为它在设置分隔符之前已经读取了第一行。我尝试将其作为环境变量提供:
cat bla.txt | $/="\n" ruby -n -e 'puts $_.chop + "---" '
但这会使 shell 感到困惑 - 它试图将 $/ 解释为命令(我还尝试用一个、两个、三个或四个反斜杠转义 $,但都无济于事)。
那么如何将 $/ 与 ruby -n -e 结合使用?
【问题讨论】:
标签: ruby command-line io