Следующий скрипт awk
может сделать то, что вы просите:
echo 'int var1;
int var2;
int var3;
int var4;
int var5;
' | awk '
/^int var2;$/ {
count = 3;
}
{
if (count > 0) {
$0 = "//"$0;
count = count - 1;
};
print;
}'
Это выводит:
int var1;
//int var2;
//int var3;
//int var4;
int var5;
Как это работает, относительно просто. Переменная счетчика c
определяет, сколько строк осталось оставить для комментария. Он начинается с 0, но когда вы находите определенный шаблон, он устанавливается на 3.
Затем он начинает обратный отсчет, затрагивая столько строк (включая ту, которая установила 3).
Если вас не очень волнует читаемость, вы можете использовать более короткое:
awk '/^int var2;$/{c=3}{if(c>0){$0="//"$0;c=c-1};print}'
Имейте в виду, что счет будет сброшен при каждом обнаружении шаблона. Кажется, это логичный способ обработки:
int var1; ----> int var1;
int var2; //int var2;
int var3; //int var3;
int var2; //int var2;
int var3; //int var3;
int var4; //int var4;
int var5; int var5;
Если это не , что вы хотели, замените count = 3;
на if (count == 0) {count = 3;};
или используйте:
awk '/^int var2;$/{if(c==0){c=3}}{if(c>0){$0="//"$0;c=c-1};print}'
для компактной версии.