我想使用 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 结合起来?
最佳答案
使用-0
选项:
cat bla.txt | ruby -011 -n -e 'puts $_.chop + "---" '
a---
b---
c---
-0[ octal] Sets default record separator ($/) as an octal. Defaults to \0 if octal not specified.
制表符的 ascii 代码为 9,八进制为 11。因此 -011
关于ruby - 如何向 ruby -n -e 提供 $INPUT_RECORD_SEPARATOR?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35155545/