【问题标题】:Script to increment number in a file增加文件中数字的脚本
【发布时间】:2016-07-14 18:10:12
【问题描述】:

我有一个如下文件,假设文件名为file1.txt:

s.version      = "11.7.10"

这里我必须将最后一个数字加 1,所以它应该是 1+1=2 之类的......

s.version      = "11.7.11"

有什么办法吗。提前致谢。

【问题讨论】:

  • 这个要求不明确,因为版本不只是一个浮点数。
  • @sjsam 我已经修改了内容,谢谢。
  • 您要在此处更新修订版吗?
  • @sjsam 对不起,我是新人,请告诉我该怎么做,谢谢。

标签: shell


【解决方案1】:

我会选择Perl,如下:

perl -pe '/s.version/ && s/(\d+)(")/$1+1 . $2/e' file.txt

这就是说... “在您找到“s.version”的任何行上,将最后一个或多个数字替换为双引号,无论这些数字是加一还是双引号“

所以,如果您的文件包含以下内容:

fred
s.version      = "11.7.10"
s.version      = "11.7"
s.version="12.99.99"
frog

你会得到这个:

fred
s.version      = "11.7.11"
s.version      = "11.8"
s.version="12.99.100"
frog

如果您希望Perl 就地编辑文件(即覆盖输入文件),您可以使用-i 选项:

perl -i.orig -pe '/s.version/ && s/(\d+)(")/$1+1 . $2/e' file.txt

然后您的输入文件将被覆盖,但备份保存在file.txt.orig

【讨论】:

  • p取消n标志。也可以更简洁perl -pe 's/s.version.*\K\d+/$&+1/e'
  • @123 感谢您的见解。我已按照您的建议删除了 -n 标志。 K 语法超出了我微薄的 Perl 技能,我无法令人满意地解释它,所以我宁愿不要尝试将其作为自己的sell!如果您想将其作为答案,我将非常乐意为您投票:-)
  • 来自 perlre \K [6] Keep the stuff left of the \K, don't include it in $&。随意在您的答案中使用它,或者不使用它,取决于您。不过我不会写答案:)
猜你喜欢
  • 2015-12-25
  • 2016-10-18
  • 1970-01-01
  • 2018-09-25
  • 2020-04-23
  • 1970-01-01
  • 2014-12-30
  • 2012-03-16
  • 2014-01-17
相关资源
最近更新 更多