Использование бывшего редактора для увеличения числа, следующего за шаблоном в файле

Знаю, как использовать 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)

Хотя есть страница помощи бывшего редактора, я не могу понять, как

  1. Разбор следующего символа после шаблона поиска, number в этом случае
  2. Увеличение до 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
Другие вопросы по тегам