使用perl,你可以这样做:
$ perl -pi -e 's/foo/bar/g' *.txt
将在当前目录中的所有* .txt文件中用“bar”替换字符串“foo”。
我喜欢这个,但我想知道使用Ruby是否可以做同样的事情。
答案 0 :(得分:7)
是的。 Ruby具有大多数Perl命令行选项的等价物,其中许多都是相同的。
stack
以下是$ ruby -pi -e 'gsub /foo/, "bar"' *.txt
的相关文档:
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
- 使Ruby假定您的周围循环 脚本,它使得迭代文件名参数有点像-n
或sed -n
。awk
while gets ... end
- 行为与-p
切换大致相同,但打印的值为 循环的每一端都有变量-n
。例如:$_
我的上述代码使用Kernel#gsub
,该版本仅在% echo matz | ruby -p -e '$_.tr! "a-z", "A-Z"'
MATZ
/ -p
模式下可用。根据文档:
gsub(模式,替换)→$ _
gsub(pattern){| ... |阻止}→$ _相当于
-n
,但如果$_.gsub...
将会更新 发生了替代。仅在$_
/-p
命令行选项时可用 指定。
还有一些其他类似的内核方法,有用的知识:chomp
,chop
和(自然)sub
。
结帐-n
;有很多很棒的功能。