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 sit 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 ut aliquip ex ea commodo consequat.

出力:

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 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 に答える