将文件中的所有数字加一

2 投票
2 回答
916 浏览
提问于 2025-04-18 07:43

我有一个文件,内容大概是这样的:

(890 1782 0)
(8 9 56)(5 28 987)

我想把里面的每个数字都加一:

(891 1783 1)
(9 10 57)(6 29 988)

我相信一定有简单的方法可以做到这一点,但我就是想不出来。用什么语言都可以(bash/awk/perl/python)

2 个回答

0

我的解决方案:

numbers=$(egrep -o "[0-9]+" input.txt | xargs printf "%d + 1\n"  | bc)
printf "$(cat input.txt  | sed -r 's/[0-9]+/%d/g')\n" $numbers
4

你可以通过使用 \d+ 这个正则表达式来找到所有的数字。接着,可以使用 re.sub() 函数,并把一个函数作为 repl 参数传进去。如果你想直接修改一个文件,可以使用 fileinput

import fileinput
import re

pattern = re.compile('\d+')
for line in fileinput.input('input.txt', inplace=True):
    if line:
        print pattern.sub(lambda m: str(int(m.group(0)) + 1), line)

举个例子(这里用字符串代替文件):

>>> import re
>>> s = "(891 1783 1)"
>>> pattern = re.compile('\d+')
>>> pattern.sub(lambda m: str(int(m.group(0)) + 1), s)
'(892 1784 2)' 

撰写回答