Я пытаюсь ввести строку, содержащую переменные выше n-го совпадения шаблона, используя awk (на данный момент).Моя настоящая цель - изменить содержимое файла real_printf.c, добавив строки чуть выше 2-го совпадения return (0);
, содержащего, например, printf("%s%d%s", str00,int01,str03);
.Я создаю генератор случайных printf в качестве добровольного бонуса для школьного проекта (-> перекодирование printf в .c) и уже могу вводить объявление случайных переменных, преобразовывать флаги между %
и индикатором преобразования, среди прочего.Это последний шаг, прежде чем я получу рабочий прототип.
У меня уже есть команда awk для совпадения return (0);
, но я столкнулся с первой ошибкой, говорящей, что я делю на 0 и, таким образом, заканчиваю выполнение awk.См. Приведенный ниже код:
1) awk '/return/{c++;if(c==2){ print "\t\tprintf("'$input_pf'", '$var_name');"; c=1 }} 1' .annex/real_printf.c
Я исправил эту ошибку, изменив приведенный выше код на приведенный ниже код, прочитав множество онлайн-ресурсов, используяawk -v и объявление переменных:
2) awk -v input="$input_pf" name="$var_name" "/return/{c++;if(c==2){ print "\\t\\tprintf\(\"$input\", $name\);"; c=1 }} 1" .annex/real_printf.c
Для приведенного выше кода оболочка вернула эту ошибку:
awk -v input=%p name=ptr00 '/return/{c++;if(c==2){ print \t\tprintf("",' ')'
awk: can't open file /return/{c++;if(c==2){ print \t\tprintf("",
source line number 1
+ '; c=1 }} 1' .annex/real_printf.c
.annex/modify/pct_conv.sh: line 34: ; c=1 }} 1: command not found
Поэтому я решил удалить двойные кавычки вокруг переменных после awk -v, см. Код ниже.
3) awk -v input=$input_pf name=$var_name "/return/{c++;if(c==2){ print "\\t\\tprintf\(\"$input\", $name\);"; c=1 }} 1" .annex/real_printf.c
Теперь я получаю следующий результат, и у меня не хватает идей, чтобы попробовать:
awk -v input=%f%o%s name=f00,o01,str02 '/return/{c++;if(c==2){ print \t\tprintf("",' ')'`
`awk: syntax error at source line 1
context is
``>>> name=f00,o01, <<<``
awk: bailing out at source line 1
+ '; c=1 }} 1' .annex/real_printf.c
.annex/modify/pct_conv.sh: line 34: ; c=1 }} 1: command not found
Это должно быть проблемой синтаксиса, или я могу просить слишком много из awk в одной строке.Возможно, awk даже не лучший инструмент для этого.Я попытался с sed -i '' 's/return (0);/printf("$input_pf", $var_name)/2'
, чтобы перейти ко 2-му совпадению моего паттерна, но это также не сработало бы.
Как бы вы решили эту проблему?