我有一个包含国际象棋动作的文件 -
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)
替换它?
答案 0 :(得分:1)
这应该这样做:
perl -pe 's/(\d+)\.\s/($1-44).". "/ge' file.txt
答案 1 :(得分:1)
或者使用\b
确保数字前面没有字母
perl -p -e's/\b(\d+)/$1-44/ge'
然后您不需要将.
和空格带入替换表达式
答案 2 :(得分:0)
对已接受的解决方案的改进:
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