1.删除匹配行的上一行和下一行:

sed -i -e '/string/{n;d}' -e '$!N;/\n.*string/!P;D' file
2.sed中使用变量,删除匹配行的上一行和下一行:

AA=string     #变量指定匹配字符串
sed -i -e '/'"$AA"'$/{n;d}' -e '$!N;/\n.*'"$AA"'$/!P;D' file

例子:

INSERT INTO bonusreturnorder VALUES ('47', '224', '1300573', '2', '1', 'WX20160203083601539373', 'HBTK20160204020000110119', '2016-02-04 02:00:01', '2016-02-04 02:00:00', '1200.00', '超时未领完');
INSERT INTO bonusreturnorder VALUES ('50', '254', '697', '2', '1', 'WX20160203085132174280', 'HBTK20160204020001045349', '2016-02-04 02:00:02', '2016-02-04 02:00:01', '600.00', '超时未领完');
--BONUSID number(11) ,DELETEFLAG number(2) ,TYPE number(2) ,
); CREATE TABLE bonususer (
--SENDUSERID number(11) ,SENDUSERNAME varchar2(32) ,BONUSTICKETNO varchar2(32) ,
); INSERT INTO bonususer VALUES ('332', '155', '100.00', '85705', '3', '2016-02-03 07:12:27', '2016-02-03 07:13:11', null, '1', '1322', null, 'HB201602030712277209291');
INSERT INTO bonususer VALUES ('335', '155', '100.00', '1322', '3', '2016-02-03 07:12:27', '2016-02-03 07:12:38', null, '1', '1322', null, 'HB201602030712277209292');
--receiveUserId number(11) NOT NULL,deleteFlag number(1) NOT NULL ,createTime date ,
); INSERT INTO rb_bonustouser VALUES ('97154', '8515718', '239473', '1', '2017-01-11 19:28:16');
INSERT INTO rb_bonustouser VALUES ('97156', '8515718', '11326', '1', '2017-01-11 19:28:16');

要求:

使用sed删除以)开头的行的上一行末尾的逗号

苦恼了我两个晚上也没搞定,期间也参考了网上一些大神的博客和GNU官网sed命令的详解。最终选择在CSDN上发帖求助文本处理大神,迎刃而解。在此感谢大牛 “代码誉写工”。

[pc@S5 ~]$ sed '/,\s*$/{:loop; N; /,\(\s*\|\n\))/! bloop; s/,\s*[\n]\?\s*)/\n)/}' file
20000110119', '2016-02-04 02:00:01', '2016-02-04 02:00:00', '1200.00', '超时未领完');
INSERT INTO bonusreturnorder VALUES ('50', '254', '697', '2', '1', 'WX20160203085132174280', 'HBTK20160204020001045349', '2016-02-04 02:00:02', '2016-02-04 02:00:01', '600.00', '超时未领完');
--BONUSID number(11) ,DELETEFLAG number(2) ,TYPE number(2)
); CREATE TABLE bonususer (
--SENDUSERID number(11) ,SENDUSERNAME varchar2(32) ,BONUSTICKETNO varchar2(32)
); INSERT INTO bonususer VALUES ('332', '155', '100.00', '85705', '3', '2016-02-03 07:12:27', '2016-02-03 07:13:11', null, '1', '1322', null, 'HB201602030712277209291');
INSERT INTO bonususer VALUES ('335', '155', '100.00', '1322', '3', '2016-02-03 07:12:27', '2016-02-03 07:12:38', null, '1', '1322', null, 'HB201602030712277209292');
--receiveUserId number(11) NOT NULL,deleteFlag number(1) NOT NULL ,createTime date
); INSERT INTO rb_bon

解释:
\s匹配空格、制表符、换行、回车,也就是\s其实也匹配\n(多行模式的每行结尾)
\s*就是有0到n个空格或\n
/,/{}只要找到“,”就执行{}里的语句
:loop就是个标识,bloop 就是跳转到:loop
N是把下一行加入模式空间
/.\s*)/! bloop是如果模式空间发现了“, )”(这个“,”和“)”之间也许有n多个空格和回车,但没有其它字符),就不再执行:loop,也就是不N,而是执行bloop后的语句
s/,\s*)/\n)/ 就是去掉“,”号

sed删除匹配行的上一行和下一行相关推荐

  1. 使用sed删除匹配行的上一行和下一行

    1.删除匹配行的上一行和下一行: sed -i -e '/string/{n;d}' -e '$!N;/\n.*string/!P;D' file 2.sed中使用变量,删除匹配行的上一行和下一行: ...

  2. R语言使用Hmisc包的impute函数填充dataframe数据中特定数据列中的缺失值、将空值null用上一行和下一行值的平均值填充

    R语言使用Hmisc包的impute函数填充dataframe数据中特定数据列中的缺失值.将空值null用上一行和下一行值的平均值填充 目录

  3. sed删除指定行的上一行

    有这么一个需求,需要从若干个apache虚机配置文件中删除一段内容,类似下面这种 <VirtualHost *> ServerName abc.com DocumentRoot /home ...

  4. sed 删除匹配行的前后行

    2019独角兽企业重金招聘Python工程师标准>>> 删除匹配行的前后行 删除匹配行的下一行 sed -ne 'p;/niyaopipeideneirong/n' nidewenj ...

  5. sed常见用法,删除匹配行的上2行,下3行

    删除匹配的下一行到最后一行 [root@test200 ~]# cat test a b c d e f [root@test200 ~]# sed '/c/{p;:a;N;$!ba;d}' test ...

  6. sed 删除匹配行的指定字符串

    这里以nginx配置文件为例,修改日志格式. log_format main '$remote_addr - $remote_user [$time_local] "$request&quo ...

  7. Sed 删除匹配行,匹配的字符用Shell变量替换,且变量里含有斜杠“/”时,无法删除 解决办法

    原文链接: https://zhidao.baidu.com/question/2138070399877009148.html 修改语法,用#代替",这个只能用在sed的s替换命令中,如: ...

  8. LINUX使用sed删除匹配行

    具体来说: TEXT=ts-office.desktop FILE=mimeapps.list sed -i "/${TEXT}/"d ${FILE} 当然,两个变量也可以直接写进 ...

  9. linux bash shell sed 删除匹配行

    [yeqiang@harbor tmp]$ cat a.txt aaa bbb ccc [yeqiang@harbor tmp]$ sed -i '/aaa/d' a.txt [yeqiang@har ...

最新文章

  1. python入门练习题-python入门练习题2
  2. RestTemplate--解决中文乱码
  3. springboot创建项目(通过spring官网)详细
  4. Nmap个人实战总结
  5. 考研数学自整理,弥补知识漏洞(强化、冲刺)
  6. 学会这些 Python 美图技巧,就等着女朋友夸你吧!| 原力计划
  7. linux学习笔记:磁盘挂载与卸载命令
  8. 谁爱谁都没有错... ...
  9. 基于共享内存和多重哈希实现分布式缓存系统
  10. Java实现两个文件夹之间的同步(改进版)
  11. 电子元件-555时基芯片
  12. 计算机系统备份教案,系统备份教案推荐.doc
  13. win10系统ltsc和服务器版哪个好,win10哪个版本最稳定流畅
  14. 车牌识别算法介绍与实践
  15. 开关电源(DC/DC)原理分析
  16. c++ 控制台游戏打砖块
  17. D语言使用dub编译ms-coff文件
  18. luogu1378 油滴扩展 (深搜)
  19. 21_RS485简单讲解
  20. 营收净利双双超市场预期,微盟财报给我们带来哪些启示?

热门文章

  1. android平台上持久化存储3种手段_Android 数据持久化==存储数据的五种方法
  2. Open3d学习计划——4(网格)
  3. python的字体如何调整
  4. Unity——场景远处迷雾效果
  5. IT博客兴衰史:致那些牛逼闪闪的日子
  6. 模仿学习--技术综述
  7. matlab解决svmtrain转化为fitcsvm函数的过程
  8. 如何清服务器redis缓存信息,redis desktop manager怎么清空缓存?redis desktop manager清空Redis缓存的方法...
  9. Netapp 磁盘、盘柜、控制器固件升级总结
  10. raid1 raid2 raid5 raid6 raid10的优缺点