用sed/awk注释掉N行
如何从某个模式和N行开始注释出行用sed/awk注释掉N行,sed,awk,Sed,Awk,如何从某个模式和N行开始注释出行 int var1; int var2; int var3; int var4; int var5; 我想注释掉包括var2在内的3行(而不是根据它们的内容!): 以下awk脚本可以满足您的要求: echo 'int var1; int var2; int var3; int var4; int var5; ' | awk ' /^int var2;$/ { count = 3; } { if (count
int var1;
int var2;
int var3;
int var4;
int var5;
我想注释掉包括var2在内的3行(而不是根据它们的内容!):
以下
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如果(计数=0){count=3;},则使用代码>或使用:
awk '/^int var2;$/{if(c==0){c=3}}{if(c>0){$0="//"$0;c=c-1};print}'
对于精简版。还有此脚本:
sed-i'2,4 s:^://:'test.txt
test.txt:
int var1;
int var2;
int var3;
int var4;
int var5;
int-var1;
int-var2;
int-var3;
int-var4;
int-var5;
输出:
int var1;
//int var2;
//int var3;
//int var4;
int var5;
int-var1;
//int-var2;
//int-var3;
//int-var4;
int-var5;
这需要GNUsed
sed '/^int var2;$/,+2 s.^.//.'
GNU awk(可能还有其他awk)具有模式范围:
gawk '/var2/, c==2 {$0 = "//" $0; c++} { print }' file.c
或写得通俗易懂:
/var2/, c == 2 {
$0 = "//" $0
c++
}
{
print
}
编辑:
工作,所以我认为范围是AWK规范的一部分。你也可以把增量放在范围模式中以保存一些击键
它将第一个操作应用于包括与var2匹配的行在内的行,然后应用到c==2。
它将第二种模式应用于每一行。另外:awk'/var2/{c=3}c-->0{printf//“}1'文件
gawk '/var2/, c==2 {$0 = "//" $0; c++} { print }' file.c
/var2/, c == 2 {
$0 = "//" $0
c++
}
{
print
}
awk --posix '/var2/, c++ == 2 {$0 = "//" $0} { print }'