匹配前删除3行,匹配后删除1行,不包括带sed的匹配行

匹配前删除3行,匹配后删除1行,不包括带sed的匹配行,sed,Sed,我想使用sed-I删除。我知道,用awk的方式 if {[string match blr* [uname nodename]]} { puts stderr "version sd_root_2013_11_04 does not exist" } else { setenv sd_ROOT /tools/sd/sd_root_2013_11_04 } 预期产出: setenv sd_ROOT /tools/sd/sd_root_2013_11_04 可以使用sed完成,但非常难看:

我想使用sed-I删除
。我知道,用awk的方式

if {[string match blr* [uname nodename]]} {
 puts stderr "version sd_root_2013_11_04 does not exist"
} else {
  setenv sd_ROOT /tools/sd/sd_root_2013_11_04
}
预期产出:

setenv sd_ROOT /tools/sd/sd_root_2013_11_04

可以使用
sed
完成,但非常难看:

sed -n '1{N;N;x;n}; /setenv/{N;s/.*//;h;n}; {H;x;s/^\n//;P;s/^[^\n]*\n//;x}; ${x;p}'

可以使用
sed
完成,但非常难看:

sed -n '1{N;N;x;n}; /setenv/{N;s/.*//;h;n}; {H;x;s/^\n//;P;s/^[^\n]*\n//;x}; ${x;p}'

为什么
awk
解决方案不起作用?我已将此命令应用于目录中的所有文件,
awk
不支持就地编辑。要做到这一点,我必须包装
awk
,因此我更喜欢
sed
GNU-awk 4.*支持就地编辑,就像GNU-sed一样<代码>awk-i替换“脚本”文件
。即使没有,也不要创建不合适的sed脚本,以免自己使用
cmd file>tmp和&mv tmp file
创建tmp文件。为什么
awk
解决方案不起作用?我已经对目录中的所有文件应用了此命令,
awk
不支持就地编辑。要做到这一点,我必须包装
awk
,因此我更喜欢
sed
GNU-awk 4.*支持就地编辑,就像GNU-sed一样<代码>awk-i替换“脚本”文件。即使没有,也不要创建不合适的sed脚本,以免自己使用
cmd file>tmp&&mv tmp file
创建tmp文件。请对此进行解释。我使用过它,但没有给出预期的输出。请解释一下。我使用过它,但没有给出预期的输出