【发布时间】:2013-01-10 21:02:47
【问题描述】:
我正在尝试使用 ruby 在 gsub() 中生成迭代值。我写的那一行是:
ruby -pe '$i=0; gsub(/⎦\d+?⎡/, "⎦#{$i+=1}⎡")' < test.txt
但这实际上并没有进行迭代;相反,它将$i 的值设置为零,并在每次替换发生时将其加1。
我也用过:
ruby -pe 'BEGIN{$i=0}; gsub(/\d+?/, "#{$i+=1}")' < test.txt
那个输出行号而不是变量迭代值。不应该只在 REGEX 匹配时才调用 gsub() 吗?
该命令的目的是将迭代值 + 1 替换为文件中找到的下一个数字。例如:
Lorem ipsum dolor 2 sat amet, consectetuer adipiscing elit, sed 7 diam nonummy nibh euismod 1 tincidunt ut laoreet dolore magna 10 aliquam erat volutpat。 Ut wisi enim ad minim veniam, quis nostrud exerci 15 tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.
输出:
Lorem ipsum dolor 1 sat amet, consectetuer adipiscing elit, sed 2 diam nonummy nibh euismod 3 tincidunt ut laoreet dolore magna 4 aliquam erat volutpat。 Ut wisi enim ad minim veniam, quis nostrud exerci 5 tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.
更新1: 进一步阅读后我尝试了这一行:
ruby -pe 'BEGIN{$i=0}; gsub /\d+?/, "#{$i+=1}" if ~/\d+?/' < aa01.xhtml
但是,我使用的命令行中的进程似乎不正确。它应该首先找到有数字的行。然后递增变量并将其替换为找到的数字的位置,如果同一行中存在任何数字,则移动到下一个数字。
【问题讨论】:
-
你需要这种风格的命令行而不是
ruby my_easy_script.rb吗? -
风格没有限制。我只是认为单线会更容易,但也许不是。
标签: ruby