Использование бывшего редактора для увеличения числа, следующего за шаблоном в файле
Знаю, как использовать 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
переместит образец patternGoingDown
после второго появления foo
, Мое требование - принять аналогичную логику для увеличения числа после шаблона.
Пример:-
$ cat input-file
The number is now number(60)
Можно ли использовать ex
редактор для увеличения числа от 60
в 61
лайк
$ cat input-file
The number is now number(61)
Хотя есть страница помощи бывшего редактора, я не могу понять, как
- Разбор следующего символа после шаблона поиска,
number
в этом случае - Увеличение до
61
который я обычно могу сделать черезCtrl+A
когда используешьvi
редактор.
Я знаю, что есть другие инструменты для этой работы, но мне особенно нужно использовать ex
редактор в синтаксисе, который я упомянул.
1 ответ
Это сложно, потому что Vim на самом деле не подходит для этого. Awk есть, но POSIX Awk не работает на месте, поэтому вы должны использовать оба:
ex -sc '%!awk "\
{\
match(\$0, /[[:digit:]]+/)\
j = substr(\$0, RSTART, RLENGTH)\
sub(j, ++j)\
}\
1\
"' -cx file