使用 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 帮助页面,但我不知道如何
- 解析搜索模式后的下一个字符,在本例中为
number
- 增加到
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
我知道如何使用 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 帮助页面,但我不知道如何
- 解析搜索模式后的下一个字符,在本例中为
number
- 增加到
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