Ruby相当于Perls一行字符串替换器

Tor*_*ein 1 ruby terminal perl

使用perl,您可以这样做:

$ perl -pi -e 's/foo/bar/g' *.txt

这将在当前目录中的所有*.txt文件中用"bar"替换字符串"foo".

我喜欢这个,但我想知道使用Ruby是否可以做同样的事情.

Jor*_*ing 7

是的.Ruby具有大多数Perl命令行选项的等价物,其中许多是相同的.

$ ruby -pi -e 'gsub /foo/, "bar"' *.txt
Run Code Online (Sandbox Code Playgroud)

以下是相关文档man ruby:

  • -i extension - 指定就地编辑模式.如果指定了扩展名,则将其添加到旧文件名以生成备份副本.例如:

    % 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
    
    Run Code Online (Sandbox Code Playgroud)
  • -n- 使Ruby假定您的脚本周围有以下循环,这使得它在文件名参数上迭代,sed -n或者像 awk.

    while gets
      ...
    end
    
    Run Code Online (Sandbox Code Playgroud)
  • -p- 行为与-nswitch 大致相同,但$_在循环的每一端打印变量的值.例如:

    % echo matz | ruby -p -e '$_.tr! "a-z", "A-Z"'
    MATZ
    
    Run Code Online (Sandbox Code Playgroud)

我上面的代码使用Kernel#gsub,仅在-p/ -nmode中可用.根据文档:

gsub(模式,替换)→$ _
gsub(模式){| ... | 阻止}→$ _

相当于$_.gsub...,除非在$_发生替换时将更新.仅在指定-p/ -n命令行选项时可用.

还有其他此类核方法,这是需要了解的屈指可数:chomp,chop,和(自然)sub.

退房man ruby; 有很多很棒的功能.