对于小文件,可以翻转后正序删除

tac file | sed '/tom/I,+2 d' | tac                    #即删除不区分大小写匹配到有tom的行,同时删除向上两行

grep

grep -A 2    匹配后继续向下打印2行-B 2  匹配后继续向上打印2行-C 2    向上向下各打印2行

awk

下面awk脚本可删除指定具体匹配行的前n行

#!/bin/sh
# grep-ac: a grep-like awk script
# Arguments: pattern = awk regexp to search for
#            before = number of lines to print before a match
#            after = number of lines to print after a match
{ "exec" "awk" "-f" "$0" "$@"; }
# The array h contains the history of lines that haven't been printed
# but are eligible for being "before" lines.
# The variable until contains the number of the last "after" line to print.
match($0, pattern) {   # the current line matchesfor (i in h) {print h[i];    # print each remaining before linedelete h[i];   # delete each line as it's printed}until=NR+after;    # record the last after line to print
}
{if (NR<=until) print $0;    # from a match to its last after line: printelse h[NR]=$0;              # after that: save in historydelete h[NR-before];        # remove line too old to be a before line
}
END {exit !until}               # exit status: 0 if there was a match, else 1
 cat who.txt | ./dbefor.sh -vbefore=2 -vpattern='tom'

vim(ex模式)

vim -e -c 'g/tom/.-2,.d' -c 'wq'  file               #命令上运行,删除匹配到包括tom的前3行

perl 滑动窗口

待学习

perl -ne 'push @lines, $_;splice @lines, 0, 3 if /tom/;print shift @lines if @lines > 2}{ print @lines;'                               #删除匹配到包括tom的前3行

sed

sed -e:b -e '$!{N;2,5bb' -e\} -e'/\n.*match/!P;D'           #删除匹配match的前5行
.sed -i -e '/string/{n;d}' -e '$!N;/\n.*string/!P;D' file      #删除匹配行的上一行和下一行:

参考https://blog.csdn.net/lovedingd/article/details/106541466
https://www.gnu.org/software/sed/manual/sed.html#Hold-and-Pattern-Buffers

linux 处理匹配文本的前后行相关推荐

  1. linux查看单词个数,Linux怎么统计文本的的行数/单词数和字符数?

    Linux怎么统计文本的的行数/单词数和字符数? Linux系统中想要统计文本的行数.单词和字符数量,该怎么统计呢?我们可以使用SecureCRT来统计,下面我们就来看看详细的教程. 1.启动Linu ...

  2. linux下pdb文件除水,Linux命令删除文本里rmsd20行,输入到一个新的文本,然后提取出相应的pdb id。...

    Linux命令删除文本里rmsd>20行,输入到一个新的文本,然后提取出相应的pdb id. 文本名字为 rmsd.dat, 文本内容是如下: refer.pdb - complex_patch ...

  3. linux统计文件单词数,Linux怎么统计文本的的行数/单词数和字符数?

    Linux系统中想要统计文本的行数.单词和字符数量,该怎么统计呢?我们可以使用SecureCRT来统计,下面我们就来看看详细的教程. 1.启动Linux系统,用SecureCRT(或者其他的ssh工具 ...

  4. 《Linux指令从入门到精通》——4.3 Linux下全屏幕文本编辑器的命令行方式

    本节书摘来自异步社区<Linux指令从入门到精通>一书中的第4章,第4.3节,作者:宋磊 , 宋馥莉 , 雷文利著,更多章节内容可以访问云栖社区"异步社区"公众号查看 ...

  5. linux利用grep查看打印匹配的下几行或前后几行的命令

    linux系统中,利用grep打印匹配的上下几行 如果在只是想匹配模式的上下几行,grep可以实现. $grep -5 'parttern' inputfile //打印匹配行的前后5行 $grep ...

  6. 如何快速将合并居中的单行文本变为多行以匹配不同内容

    如何快速将合并居中的单行文本变为多行以匹配不同内容 **问题:**在Excel中将合并居中的单行文本变为多行以匹配不同内容,如下图,如果数量较少,很容易处理,如果数量很多,处理起来相对麻烦,本文尝试用 ...

  7. linux查看文件时显示行号,linux中查看文件时显示行号

    linux中查看文件时显示行号 [root@1-min etc]# cat -n rsyslog.conf              //显示所有行号(包括空行) [root@1-min etc]# ...

  8. Linux Shell处理文本最常用的工具大盘点

    find文件查找 查找txt和pdf文件  找txt和pdf文件 find . \( -name "*.txt" -o -name "*.pdf" \) -pr ...

  9. Linux正则表达式和文本处理工具(gred、awk、sed)

    使用Linux 的 gred.awk.sed 可以方便得处理文本,然而若要灵活使用这三个工具,首先必须理解正则表达式.这里先对正则表达式进行学习,做点记录,之后再练习一下文本处理工具的使用. 正则表达 ...

最新文章

  1. 【BZOJ1015】【JSOI2008】星球大战 并查集
  2. [书目20130216]深入浅出WPF
  3. UrlUtils工具类,Java URL工具类,Java URL链接工具类
  4. dart 语言是jvm_Dart编译技术在服务端的探索和应用
  5. 带你了解线缆、WIFI、以太网协议和网络寻址
  6. 【数据结构与算法】之N个数中有K个数可能的组合算法
  7. 单元测试之—JUnit与SpringTest的完美结合
  8. uni-app实现传值路径乱码的问题
  9. 神经稀疏体素场论文笔记
  10. java string字节大小_Java中char[] 和 String 类型占用字节大小问题
  11. 服务器和客户端Socket单向通信例子
  12. 抽象工厂模式java_抽象工厂模式
  13. android视频播放器sdk对比,Android项目之android SDK视频播放与vitamio视频播放
  14. C#获取实体的属性和值(通用于BS、cs架构)
  15. 使用jsBridge实现H5与原生App交互
  16. python基本代码教程-如何真正零基础入门Python?(第一节)
  17. UV-a1586-分子式
  18. python列表转化为数字信号的过程_如何用python写一个简单的数字信号处理计算器(文章末公开代码)?...
  19. 【物理应用】Matlab实现两端固支梁热力耦合的有限元分析
  20. docker安装nfs文件服务所需镜像,centos7安装nfs所需的安装包

热门文章

  1. 小程序嵌套h5页面_快速小程序开发之微信小程序内嵌 H5
  2. python3.8安装mayavi4.7.3
  3. MAC最详细配置rz/sz命令
  4. Kafka原理+操作+实战
  5. js——浏览器缓存(http缓存)和本地存储
  6. 在C语言中怎样定义一个字符串并输入输出
  7. dotnetfx35.exe
  8. JAVA学习笔记JEECG BOOT介绍
  9. python安装opencv问题解决
  10. MySQL中如何定义一个自己写的函数