Следующая 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}'
для компактной версии.
«от определенного рисунка» –
ohh я пропустил это ... !! – sud03r