0

我正在尝试使用 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。

Update1:​​我在进一步阅读后尝试了这一行:

ruby -pe 'BEGIN{$i=0}; gsub /\d+?/, "#{$i+=1}" if ~/\d+?/' < aa01.xhtml

但是,我使用的命令行中的过程似乎一开始就不正确。它应该首先找到有数字的行。然后增加变量并将其替换为找到的数字,如果同一行中存在任何数字,则移动到下一个数字。

4

1 回答 1

1

我认为表达式"⎦#{$i+=1}⎡"只计算一次。在每次替换时计算一个块。

$i=0
File.open('test.txt') do |f|
    f.each_line do |line|
        modif = line.gsub(/\d+/) {|num| "#{$i+=1}"}
        puts modif
    end
end

输出:

Lorem ipsum dolor 1 sit 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.

新输入:

Lorem ipsum dolor 2 sit amet, consectetuer adipiscing elit, 
sed 7 diam nonummy nibh 
euismod 1 tincidunt ut 44

laoreet dolore magna 10 aliquam erat volutpat.
Ut wisi enim 0 ad minim veniam, 4 quis nostrud 
exerci 15 tation ullamcorper 66 suscipit 88 
lobortis 6 nisl ut aliquip ex 1 ea1 co1mmodo consequat.

输出 :

Lorem ipsum dolor 1 sit amet, consectetuer adipiscing elit, 
sed 2 diam nonummy nibh 
euismod 3 tincidunt ut 4

laoreet dolore magna 5 aliquam erat volutpat.
Ut wisi enim 6 ad minim veniam, 7 quis nostrud 
exerci 8 tation ullamcorper 9 suscipit 10 
lobortis 11 nisl ut aliquip ex 12 ea13 co14mmodo consequat.
于 2013-01-27T11:34:55.660 回答