ruby - 如何向 ruby​​ -n -e 提供 $INPUT_RECORD_SEPARATOR?

标签 ruby command-line io

我想使用 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/

相关文章:

ruby - 在 Ruby Volt 中存储图片

用于可扩展处理程序/插件架构的 Ruby 结构

mysql - 通过 ruby​​ Rails 迁移添加 MySQL 枚举列时出现问题

command-line - 使用 P4 命令行客户端获取文件信息(过时,需要解析)

java - 非阻塞模式下的 ServerSocketChannel 未正确关闭

python - 如何在Python脚本中实现触发器

io - Flutter:写入文件的权限被拒绝

ruby - 如何有效地清除 Ruby 的负零 float ?

android - 如何在 android 中从命令行运行 ffmpeg

python - 在 Windows 上结束时如何暂停脚本?