mbi*_*ras 5 ruby string command-line
从手册页:
-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.
Run Code Online (Sandbox Code Playgroud)
有些问题浮现在脑海中:
-a,而不使用-n或-p?$F?split?-a使用?从另一个参考页面:
$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.
Run Code Online (Sandbox Code Playgroud)
我还不确定是什么-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)
Run Code Online (Sandbox Code Playgroud)
通过开关启用自动分割模式-a。它支持默认情况下进行的文本处理awk。
在自动分割模式下,Ruby 将读取作为参数给出的文件或stdin
一次一行,并且对于每一行:
$_根据字段分隔符(由-F标志指定)自动将行 , 拆分为字段$F处理完所有行后,程序退出或执行END块。请参阅此答案的示例。
自动分割模式对于处理具有很多行records(records除非更改记录分隔符是行)并且每行中有多个分隔符的表格文本文件非常有用fields。例如,考虑一个file内容:
ADG:YUF:TGH
UIY:POG:YTH
GHJUR:HJKL:GHKIO
Run Code Online (Sandbox Code Playgroud)
然后ruby -F: -a -n -e 'puts $F[2]' file打印每行的第三个字段:
$ ruby -F: -a -n -e 'puts $F[2]' file
TGH
YTH
GHKIO
Run Code Online (Sandbox Code Playgroud)
在这种情况下,-F:将字段分隔符设置为:。是 record ( ) 分割$F后字段所在的数组。分割后的每一行都会执行$_后面的操作。-e
cliruby开关与perl. cliperl使此功能更加方便,请参阅perldoc perlrun。例如,since 在没有(或)的情况-a下没有用,在,中隐式启用,这反过来又启用。情况并非如此,所有开关都必须显式传递。有关可以通过这种处理完成的好事情的示例,请查找一个衬垫。-n-pperl-F-a-nrubyawk
此外,rubycli 遵循传递命令行选项的unix 约定:
传统上,UNIX 命令行选项由破折号后跟一个或多个小写字母组成。
因此可以将-aand-n 开关和-e 标志组合起来以获得相同的结果:
$ ruby -F: -ane 'puts $F[2]' file
TGH
YTH
GHKIO
Run Code Online (Sandbox Code Playgroud)
如果这很有趣,请查看其他一些ruby衬里。
| 归档时间: |
|
| 查看次数: |
288 次 |
| 最近记录: |