sed或awk:删除/注释3行之前的模式后的n行
要删除/注释图案前的3行,包括带有图案的线条,请执行以下操作: 我如何通过sed命令实现它 参考: 上面的参考博客有助于在模式匹配后实现这一点,但我需要在匹配前知道sed或awk:删除/注释3行之前的模式后的n行,sed,Sed,要删除/注释图案前的3行,包括带有图案的线条,请执行以下操作: 我如何通过sed命令实现它 参考: 上面的参考博客有助于在模式匹配后实现这一点,但我需要在匹配前知道 define host{ use xxx; host_name pattern; alias yyy; address zzz;
define host{
use xxx;
host_name pattern;
alias yyy;
address zzz;
}
例如,下面的sed命令将在模式匹配后注释
sed -e '/pattern/,+3 s/^/#/' file.cfg
define host{
use xxx;
#host_name pattern;
#alias yyy;
#address zzz;
#}
像这样,我如何才能为before模式执行此操作
有人能帮我解决这个问题吗?将文件反转,在后面注释3行,然后重新反转文件 tac文件| sed'/pattern/{s/^/;N;N;s/\N/&/g;}'| tac 虽然我认为awk更容易阅读: tac文件| awk'/pattern/{c=3}c->0{$0=$0}1'| tac 如果允许tac: tac | sed-e'/pattern/,+3s/^/'| tac 如果不允许tac: sed-e'1!Gh、 美元!d’| sed-e’/pattern/,+3s/^/'| sed-e’1!Gh、 美元!d'
来源:这可能适用于GNU-sed:
sed ':a;N;s/\n/&/3;Ta;/pattern[^\n]*$/s/^/#/mg;P;D' file
在图案空间中收集4行,如果最后一行包含图案,则在图案空间中每行的开头插入图案
要删除这4行,请使用:
sed ':a;N;s/\n/&/3;Ta;/pattern[^\n]*$/d;P;D' file
要删除图案前的3行,但不删除包含图案的行,请使用:
sed ':a;N;s/\n/&/3;Ta;/pattern[^\n]*$/d;P;D' file
sed ':a;N;s/\n/&/3;Ta;/pattern[^\n]*$/s/.*\n//;P;D'