Tor*_*ein 1 ruby terminal perl
使用perl,您可以这样做:
$ perl -pi -e 's/foo/bar/g' *.txt
这将在当前目录中的所有*.txt文件中用"bar"替换字符串"foo".
我喜欢这个,但我想知道使用Ruby是否可以做同样的事情.
是的.Ruby具有大多数Perl命令行选项的等价物,其中许多是相同的.
$ ruby -pi -e 'gsub /foo/, "bar"' *.txt
Run Code Online (Sandbox Code Playgroud)
以下是相关文档man ruby:
-i extension- 指定就地编辑模式.如果指定了扩展名,则将其添加到旧文件名以生成备份副本.例如:Run Code Online (Sandbox Code Playgroud)% echo matz > /tmp/junk % cat /tmp/junk matz % ruby -p -i.bak -e '$_.upcase!' /tmp/junk % cat /tmp/junk MATZ % cat /tmp/junk.bak matz
-n- 使Ruby假定您的脚本周围有以下循环,这使得它在文件名参数上迭代,sed -n或者像awk.Run Code Online (Sandbox Code Playgroud)while gets ... end
-p- 行为与-nswitch 大致相同,但$_在循环的每一端打印变量的值.例如:Run Code Online (Sandbox Code Playgroud)% echo matz | ruby -p -e '$_.tr! "a-z", "A-Z"' MATZ
我上面的代码使用Kernel#gsub,仅在-p/ -nmode中可用.根据文档:
gsub(模式,替换)→$ _
gsub(模式){| ... | 阻止}→$ _相当于
$_.gsub...,除非在$_发生替换时将更新.仅在指定-p/-n命令行选项时可用.
还有其他此类核方法,这是需要了解的屈指可数:chomp,chop,和(自然)sub.
退房man ruby; 有很多很棒的功能.