增加文件中的所有数字

时间:2014-05-27 16:00:13

标签: python regex bash scripting

我有一个看起来像的文件:

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

我希望将每个数字递增一个:

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

我确信必须有一个简单的方法来做到这一点,但我无法弄明白。满意任何语言(bash / awk / perl / python)

2 个答案:

答案 0 :(得分:3)

您可以使用\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)' 

答案 1 :(得分: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