Может быть возможно сделать это (с некоторыми ограничениями) с помощью подхода, основанного исключительно на регулярных выражениях, но такое решение будет очень неловким и несколько уродливым.
Тем не менее, это не сложно в awk:
awk '
{
n=0
if ($0 ~ /no = "[0-9]+%"/) {
n = split($0, part, /"/)
if (n == 3) print part[1] "\"" part[2]+1 "%\"" part[3]
}
if (n != 3) print
}'
(Первый) оператор if проверяет, содержит ли строка ввода символы no = " , за которыми следуют одна или несколько цифр, а затем %" .
(Если вы хотите сопоставить только в начале строки, добавьте ^ между первым / и no .
Если вы хотите сопоставить только в конце строки, добавьте $ между %" и вторым / .)
Затем мы split строку на кавычки.
Переменная n получает количество частей; для no = "33%" , счетчик равен 3, а части - no = 33% и пустая строка (потому что после второй нет ничего ").
(Обратите внимание, что кавычки не появляются в деталях, потому что они являются разделителями.)
part[2]+1 будет иметь значение 34 , потому что awk будет игнорировать % после 33 , и поэтому оператор print соединяет части строки вместе, причем число увеличивается на единицу.
Как указано выше, этот скрипт разрешает другие вещи в строке до и после числа, но они могут не содержать кавычек.
Например,
The quick brown fox no = "33%" What did the bird say?
jumps over the lazy dog. no = "50%" Quoth the raven, "Nevermore."
будет преобразован в
The quick brown fox no = "34%" What did the bird say?
jumps over the lazy dog. no = "50%" Quoth the raven, "Nevermore."
Если строка не содержит no = "number%" , она не войдет в блок if и достигнет дна с n равным 0.
Если он не содержит ни одного no = "number%" но имеет дополнительные кавычки, то это будет , if блок ввести, и n будет установлено равным количеству кавычек плюс один.
В любом случае, if (n != 3) print приведет к тому, что строка ввода будет записана без изменений.
awk - это стандартная программа для Unix, Linux и других Unix-подобных систем.
(Я тестировал этот сценарий с --posix , поэтому считаю, что он не зависит от каких-либо расширений GNU.)
Если у вас нет доступа к полноценной Unix-подобной машине, я предлагаю вам установить Cygwin или просто найти версию awk которая работает на вашей машине.