免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: linlone
打印 上一主题 下一主题

[文本处理] 在文件中查找到最后一个匹配的行,然后插入一新行 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2014-06-12 19:04 |只看该作者
linlone 发表于 2014-06-12 18:43
这个成功写入原文件了:sed -ni '1h;1!H;${x;s/.*Listen[^\n]*\n/&Listen 8006\n/p}' file

从哪里能 ...


由于脚本里面需要用到变量,所以不得不改成双引号:sed -ni “1h;1!H;${x;s/.*$Pattern[^\n]*\n/&$NewLine\n/p}” file
提示错误:-bash: !H: event not found



论坛徽章:
0
22 [报告]
发表于 2014-06-12 19:22 |只看该作者
linlone 发表于 2014-06-12 19:04
由于脚本里面需要用到变量,所以不得不改成双引号:sed -ni “1h;1!H;${x;s/.*$Pattern[^\n]*\n/&$NewL ...


改成这样就可以了:sed -ni '1h;1!H;${x;s/.*'"$Pattern"'[^\n]*\n/&'"$NewLine"'\n/p}' file


论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
23 [报告]
发表于 2014-06-12 21:18 |只看该作者
回复 21# linlone


    !后面加空格

论坛徽章:
1
处女座
日期:2014-06-01 17:09:46
24 [报告]
发表于 2014-06-12 23:22 |只看该作者
[root@weoweo ~]# sed 's/Listen 8005/& \nListen 8006/' 1.txt
======================================
123
45678

999999999
Listen 8001
Listen 8002
Listen 8003
Listen 8004
Listen 8005
Listen 8006
aaaaaaaaaaaaaaaaaaaaaaaaaa
bbbbbbbb   vvvvvvvvvvvvvvv

ccccccccccccccccccccccccccccccccccccccccccccc
======================================

论坛徽章:
7
亥猪
日期:2013-10-10 17:00:29辰龙
日期:2013-10-12 16:23:19卯兔
日期:2013-11-18 17:01:27金牛座
日期:2014-09-09 10:17:052015七夕节徽章
日期:2015-08-21 11:06:172015亚冠之柏太阳神
日期:2015-09-25 13:56:42数据库技术版块每日发帖之星
日期:2016-08-06 06:20:00
25 [报告]
发表于 2014-06-13 09:02 |只看该作者
回复 17# linlone
简化谈不上;至少可以让代码好看点,没bug;把$2换成具体的数字。
  1.     awk '/Listen/{s=1;print $0;next}s{print "Listen  ***";s=0}1' file
复制代码

论坛徽章:
0
26 [报告]
发表于 2014-06-13 10:08 |只看该作者
  1. $ tac 1.txt | sed '0,/Listen/{s/Listen.*/Listen 8006\n&/}' | tac
  2. 123
  3. 45678

  4. 999999999
  5. Listen 8001
  6. Listen 8002
  7. Listen 8003
  8. Listen 8004
  9. Listen 8005
  10. Listen 8006
  11. aaaaaaaaaaaaaaaaaaaaaaaaaa
  12. bbbbbbbb   vvvvvvvvvvvvvvv

  13. ccccccccccccccccccccccccccccccccccccccccccccc
复制代码

ref:  
http://stackoverflow.com/questio ... ccurrence-in-a-file
http://stackoverflow.com/questio ... -last-match-pattern
   

论坛徽章:
10
天蝎座
日期:2013-09-22 22:32:23程序设计版块每日发帖之星
日期:2016-08-07 06:20:00lufei
日期:2016-06-17 17:38:40程序设计版块每日发帖之星
日期:2016-06-12 06:20:002016科比退役纪念章
日期:2016-05-31 15:47:20CU十四周年纪念徽章
日期:2016-05-27 12:24:562015年亚洲杯之阿曼
日期:2015-05-03 21:01:352015年辞旧岁徽章
日期:2015-03-03 16:54:15天蝎座
日期:2013-10-20 21:05:24程序设计版块每日发帖之星
日期:2016-08-11 06:20:00
27 [报告]
发表于 2014-06-13 10:21 |只看该作者

  1. lee@ubuntu:~/share$ tac test.txt | sed -e 'x;/Listen/{x;p;d};x;/Listen/{h;i \
  2. Listen 8006
  3. }' | tac

复制代码

论坛徽章:
0
28 [报告]
发表于 2014-06-13 10:58 |只看该作者
回复 27# liion631818

tac的话,sed中直接匹配到Listen然后i一行到它上面就可以了吧,需要如此复杂么……

论坛徽章:
10
天蝎座
日期:2013-09-22 22:32:23程序设计版块每日发帖之星
日期:2016-08-07 06:20:00lufei
日期:2016-06-17 17:38:40程序设计版块每日发帖之星
日期:2016-06-12 06:20:002016科比退役纪念章
日期:2016-05-31 15:47:20CU十四周年纪念徽章
日期:2016-05-27 12:24:562015年亚洲杯之阿曼
日期:2015-05-03 21:01:352015年辞旧岁徽章
日期:2015-03-03 16:54:15天蝎座
日期:2013-10-20 21:05:24程序设计版块每日发帖之星
日期:2016-08-11 06:20:00
29 [报告]
发表于 2014-06-13 11:09 |只看该作者
回复 28# 用户名注册后不能更改


    哦,不是有很多listen么?

论坛徽章:
769
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
30 [报告]
发表于 2014-06-13 11:19 |只看该作者
回复 1# linlone
  1. sed  '/^Listen/{:1;n;/^Listen/b1;s/^/Listen 8006\n/}' i
  2. ======================================
  3. 123
  4. 45678

  5. 999999999
  6. Listen 8001
  7. Listen 8002
  8. Listen 8003
  9. Listen 8004
  10. Listen 8005
  11. Listen 8006
  12. aaaaaaaaaaaaaaaaaaaaaaaaaa
  13. bbbbbbbb   vvvvvvvvvvvvvvv

  14. ccccccccccccccccccccccccccccccccccccccccccccc
  15. ======================================
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP