加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

什么是ruby -a命令行开关?

发布时间:2020-12-17 03:10:41 所属栏目:百科 来源:网络整理
导读:从 man页面: -a Turns on auto-split mode when used with -n or -p. In auto-split mode,Ruby executes $F = $_.split at beginning of each loop. 有些问题浮现在脑海中: 如果在没有-n或-p的情况下使用-a会发生什么? 什么是$F? 循环结束时会发生什么?
从 man页面:

-a     Turns on auto-split mode when used with -n or -p.
        In auto-split mode,Ruby executes
              $F = $_.split
        at beginning of each loop.

有些问题浮现在脑海中:

>如果在没有-n或-p的情况下使用-a会发生什么?
>什么是$F?
>循环结束时会发生什么?
>如何控制选择哪个角色进行拆分?
> -a打算如何使用?

从另一个reference page:

$F      The variable that receives the output from split when -a is specified.
        This variable is set if the -a command-line option is specified
        along with the -p or -n option.

我还不确定-a开关是什么.会很感激解释,但会更多地欣赏一些例子.

我试过的一些事情:

$echo foo_bar_bar | ruby -ae
ruby: no code specified for -e (RuntimeError)
$echo foo_bar_bar | ruby -ap
$echo foo_bar_bar | ruby -ap '$_'
ruby: No such file or directory -- $_ (LoadError)

解决方法

使用-a开关启用自动分割模式.它支持 awk默认执行的文本处理.
在自动分割模式下,ruby将读取作为参数或stdin给出的文件
一次一行,每行一行:

>根据字段分隔符(由-F标志指定)自动将行$_分割为字段
>将结果分配给名为$F的变量
>通过命令行提供操作.

处理完所有行后,程序退出或执行END block.请参阅此答案以获取example.

自动分割模式对于处理具有许多记录的表格文本文件(记录是除非更改了record separator的行)以及每行中的多个分隔字段非常有用.
例如,考虑一个包含内容的文件:

ADG:YUF:TGH
UIY:POG:YTH
GHJUR:HJKL:GHKIO

然后ruby -F:-a -n -e’put $F [2]’文件打印每行的第三个字段:

$ruby -F: -a -n -e 'puts $F[2]' file
TGH
YTH
GHKIO

在这种情况下,-F:将字段分隔符设置为:. $F是分割后记录($_)后字段的数组.在分割后,每行执行-e后的操作.

ruby cli开关非常类似于perl. perl cli使这个特性更加方便,见perldoc perlrun.例如,由于-a在没有-n(或-p)的情况下没用,在perl中,-F使能-a隐式,后者又启用-n.对于ruby不是这种情况,必须明确传递所有开关.
有关使用此类处理可以完成的好东西的示例,请查看awk one liners.

此外,ruby cli遵循通过command-line options的unix约定:

Traditionally,UNIX command-line options consist of a dash,followed by one or more lowercase letters.

因此可以组合-a和-n switches和-e flag来实现相同的结果:

$ruby -F: -ane 'puts $F[2]' file
TGH
YTH
GHKIO

如果这很有趣,请查看其他一些ruby one liners.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读