Le script awk
suivant peut faire ce que vous demandez:
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;
}'
Cette sortie:
int var1;
//int var2;
//int var3;
//int var4;
int var5;
La façon dont cela fonctionne est relativement simple. La variable de compteur c
décide du nombre de lignes restant à commenter. Il commence par 0, mais lorsque vous trouvez un motif spécifique, il est mis à 3.
Ensuite, il commence à décompter, affectant autant de lignes (y compris celle qui l'a mis à 3).
Si vous n'êtes pas inquiet pour la lisibilité, vous pouvez utiliser la plus courte:
awk '/^int var2;$/{c=3}{if(c>0){$0="//"$0;c=c-1};print}'
Soyez conscient que le compte sera remis à zéro chaque fois que le modèle se trouve. Cela semble être la façon logique de manipulation:
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;
Si c'est pas ce que vous vouliez, remplacer count = 3;
avec if (count == 0) {count = 3;};
ou de l'utilisation:
awk '/^int var2;$/{if(c==0){c=3}}{if(c>0){$0="//"$0;c=c-1};print}'
pour la version compacte.
"à partir d'un certain modèle" –
ohh j'ai manqué ça ... !! – sud03r