使用 ex 编辑器按照文件中的模式递增数字

Using ex editor to increment a number following a pattern in a file

我知道如何使用 ex 编辑器以类似 的语法对文件进行适当的小编辑。

例如,如答案中所述,假设我有一个文件内容如下:-

$ cat input-file
patternGoingDown
foo
bar
foo
bar

运行 使用 ex 的命令,如

$ printf "%s\n" '/patternGoingDown' 'd' '/foo' 'n' 'put' 'wq' | ex file
$ cat file
foo
bar
foo
patternGoingDown
bar

将在 foo 第二次出现后移动模式 patternGoingDown。我的要求是采用类似的逻辑在模式后增加一个数字。

示例:-

$ cat input-file
The number is now number(60)

是否可以使用 ex 编辑器将数字从 60 递增到 61 like

$ cat input-file
The number is now number(61)

尽管有 ex-editor 帮助页面,但我不知道如何

  1. 解析搜索模式后的下一个字符,在本例中为number
  2. 增加到 61,我通常可以在使用 vi 编辑器时通过 Ctrl+A 完成。

我知道还有其他工具可以完成这项工作,但我特别需要使用 ex 语法中提到的编辑器。

这很棘手,因为 Vim 不太适合这个。 Awk is,但 POSIX awk 做不到位,所以你必须同时使用:

ex -sc '%!awk "\
{\
  match($0, /[[:digit:]]+/)\
  j = substr($0, RSTART, RLENGTH)\
  sub(j, ++j)\
}\
1\
"' -cx file