想请问如果想要删除档案中 match 到的 pattern 的前几行要用甚摸指令?
例如:
Aaaa
Bbbb
Snnn
我知道在 vim 中的话可以用 :g/Snnn/-2,-1d
但如果用 command line 的话就不大知道怎摸达到这样的效果
有试过 sed 但 sed 似乎只能删除 match 到的 pattern 的后几行
想请教各位大大有没有比较好的方法可以达成这个目的?
感谢
===== 更新 =====
感谢推文的大大们提示
目前尝试过后有发现一个可行的方式了,就是先反转档案内容再删除 matched line 的后几行 然后再反转档案,不知道还有没有更精简的作法~
# 反转档案
sed '1!G;h;$!d' file or tac file
# 删除 match 到的 pattern 的后 2 行 (包含 matched line)
sed '/Snnn/,+2d' file
# 删除 match 到的 pattern 的后 2 行 (不包含 matched line)
sed '/Snnn/{n;N;d}' file
# 反转档案 -> 删除 matched line 后 2 行 -> 反转档案
sed '1!G;h;$!d' file | sed '/Snnn/,+2d' | sed '1!G;h;$!d' > file (包含 matched line)
sed '1!G;h;$!d' file | sed '/Snnn/{n;N;d}' | sed '1!G;h;$!d' > file (不包含 matched line)
但在"不包含 matched line" 的作法中似乎无法直接指定要读入后几行,要删除几行就必须要几个 "N",不晓得还有没有更好的作法~