我有一个文件,其中包含这样的国际象棋移动-
45. Qxf7+ Kh8 46. Qf8+ (46. Qf6+ Kh7 47. c6 (47. Kh2 Qe8 48. Qf4 Qd7
) 47... Bb5+ 48. Kh2 Qe8 49. c7 Bc6 50. Qd8 (50. Kg3 Bb7 51. Qd6 Qe4 52. Qd7+
Kh6 53. Qd2+ Kg7 54. f3 Qe5+ 55. Kf2 Qc5+ 56. Qe3 Qb4)) 46... Kh7 47. Qf4 Bb5+
(47... Bc4+ 48. Kh2 Bd5 49. c6 Bxc6 50. Qc7+ Kh6...
与其从 45 开始编号移动,我希望它们从 1 开始编号,就像这样 -
1. Qxf7+ Kh8 2. Qf8+ (2. Qf6+ Kh7 3. c6 ...
问题是,我不能简单地从文件中的所有数字中减去 44,因为移动本身包含数字,如 Kh8、Bc6 等。我可以使用模式[0-9]+.
检测移动编号,但是如何用(number - 44)
替换它?
这应该可以做到:
perl -pe 's/(d+).s/($1-44).". "/ge' file.txt
或者使用 b
来确保数字前面没有字母
perl -p -e's/b(d+)/$1-44/ge'
然后,您无需将.
和空格带入替换表达式
对已接受解决方案的改进:
perl -pe's/(d+)(?=.s)/$1-44/ge'
用法:
perl -i~ -pe'...' file.txt Change in place with backup
perl -i -pe'...' file.txt Change in place without backup
perl -pe'...' file.in >file.out Read from file
perl -pe'...' <file.in >file.out Read from STDIN