В настоящее время я использую AWK, чтобы найти и заменить часть строки после первых трех вхождений шаблона. Строка отформатирована следующим образом: func(tempID="39849235",count='12');
и в файле есть много таких строк, как показано ниже:
func(tempID="39849235",count='12');
func(tempID="39849235",count='12');
func(tempID="39849235",count='12');
func(tempID="39849235",count='12');
func(tempID="39849235",count='12');
func(tempID="39849235",count='12');
Используя эту ссылку, я смог найти метод использования AWK для поиска и замены первых трех экземпляров строки. Я изменил его на то, что мне было нужно, и фрагмент моего скрипта приведен ниже:
id=12349876
awk -v id="$id" 'BEGIN {matches=0}
matches < 3 && /.*tempID.*/ { sub(/tempID=.[0-9]+./,"tempID=\""id"\""); matches++ }
{ print $0 }' filName.py >filName.py.changed
Цель приведенного выше кода - найти соответствие в любой строке, содержащей tempID, и заменить число, назначенное для tempID, значением, хранящимся в переменной с именем $id
. Поиск и замена работают хорошо, но теперь я хочу заменить экземпляры 4-9 на другое число. Я попробовал следующий метод, но он все еще заменил только первые 5 экземпляров tempID:
id2=39843237
awk -v id2="$id2" 'BEGIN {matches=4}
matches < 9 && /.*tempID.*/ { sub(/tempID=.[0-9]+./,"tempID=\""id2"\""); matches++ }
{ print $0 }' filName.py >filName.py.changed
Есть ли другой способ реализовать это, чтобы заменить этот диапазон значений? Это не должно быть с AWK, это может быть с sed или любой другой утилитой Linux. Кроме того, решение не обязательно должно заканчиваться в определенной точке и ему разрешено заменять все экземпляры после третьей строки, но если есть решение, способное сделать это, это будет плюсом.