我有一个看起来像的文件:
(890 1782 0)
(8 9 56)(5 28 987)
我希望将每个数字递增一个:
(891 1783 1)
(9 10 57)(6 29 988)
我确信必须有一个简单的方法来做到这一点,但我无法弄明白。满意任何语言(bash / awk / perl / python)
答案 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