Chinaunix

标题: SED 删除匹配行问题。求助。~~~~~~~~~ [打印本页]

作者: 张不凡    时间: 2012-07-27 16:11
标题: SED 删除匹配行问题。求助。~~~~~~~~~
test.txt  



-----------------------------
aaaaaaa
happy-123456
bbbbbb
asdasawe
happy-123456
dsafsdfsd
sagasdfasd
happy-123456
------------------------------


我想用sed删除包含happy-123456的行,只想删除第一行,变成


-----------------------------
aaaaaaa
bbbbbb
asdasawe
happy-123456
dsafsdfsd
sagasdfasd
happy-123456
------------------------------



用sed -i "/happy-123456/d"  test.txt 会把所有的匹配行都删除掉。

有没有办法只删除第一行?
作者: kk5234    时间: 2012-07-27 16:21
  1. sed -i ':a;N;$!ba;s/happy-123456\n//' file
复制代码

作者: 张不凡    时间: 2012-07-27 16:39
回复 2# kk5234


能不能解释一下。。。。。


   
作者: kk5234    时间: 2012-07-27 16:43
回复 3# 张不凡

先把文件中所有的行读入pattern space中,再用s命令删除第一个含happy-123456的行。
   
作者: jiejie455    时间: 2012-07-27 17:36
本帖最后由 jiejie455 于 2012-07-27 17:38 编辑

sed '0,/happy-123456/{/happy-123456/d}' data
作者: dn833    时间: 2012-07-27 17:38
  1. sed '1,/happy-123456/{/happy-123456/d}'
复制代码
2楼命令太深奥看不懂。。。。。。写个肤浅易懂的
作者: 张不凡    时间: 2012-07-27 18:03
回复 6# dn833


这个也求个解释= =我菜鸟啊。。后面那个大括号 不懂啊~


   
作者: hbmhalley    时间: 2012-07-27 19:38
  1. /happy-123456/{x;/./p;g;d}
复制代码

作者: blackold    时间: 2012-07-28 11:45
awk
  1. awk '/happy/&&!f++{next}1' urfile
复制代码

作者: blackold    时间: 2012-07-28 12:02
本帖最后由 blackold 于 2012-07-28 20:27 编辑

回复 6# dn833


    如果第一行就是 happy-123456 ,就不行了。
作者: blackold    时间: 2012-07-28 12:03
回复 8# hbmhalley


    这方法好,比较通用。g是多余的吧。
作者: hbmhalley    时间: 2012-07-28 13:51
回复 11# blackold


    ... 不小心脑抽了 谢提醒
作者: dn833    时间: 2012-07-28 20:21
回复 10# blackold


    多谢指正啊。。。。。。。考虑不周~
作者: blackold    时间: 2012-07-28 22:39
错误示范:
  1. awk 'NR==1,/happy/{if(/happy/)next}1' urfile
复制代码
应该是:
  1. awk 'NR==1,/happy/{if(/happy/)next}1' urfile
复制代码





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2