LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 3461|回复: 10

sed能否在匹配的行下删除一行

[复制链接]
发表于 2004-7-20 19:44:42 | 显示全部楼层 |阅读模式
比如有如下文件a.txt,内容如下:
-----------------------------
abcdefg
hello,world
my dear
haha
-----------------------------
匹配的行是欲删除my dear,但是匹配模式是/hello/而不是/my dear/,
sed有这种功能嘛?
谢谢!^_^
 楼主| 发表于 2004-7-20 19:50:09 | 显示全部楼层
或者这样说,更清楚些,a.txt里头不止一个"my dear",如下:
----------------------------------
abcdefg
my dear
hello,world
my dear
haha
my dear
----------------------------------
我只想删除hello,world下的"my dear",其他的"my dear"不想删除。
我不想通过指定行号来删除该行,因为文件经常变动,一旦变动,
通过指定行号的方法将会出错;
也不想通过匹配/my dear/来删除,因为它会把所有的"my dear"全部
删除;
所以我想通过查找"hello,world",来把"hello,world"行下的
"my dear"删除,不知道sed是否有这个功能。
谢谢!
发表于 2004-7-20 20:05:32 | 显示全部楼层
  1. cat file|sed '/hello,world/{n;/my dear/d}'
复制代码

GNU sed version 4.0.5

  1. /home/lee#cat -n file
  2.      1  abcdefg
  3.      2  my dear
  4.      3  hello,world
  5.      4  my dear
  6.      5  haha
  7.      6  my dear
  8. /home/lee#cat -n file|sed '/hello,world/{n;/my dear/d}'
  9.      1  abcdefg
  10.      2  my dear
  11.      3  hello,world
  12.      5  haha
  13.      6  my dear
复制代码
 楼主| 发表于 2004-7-20 20:16:15 | 显示全部楼层
我这个是在win2k下的gnu工具,照KornLee的方法,还是不行。
你可否给我解释一下:
{N;/my dear/d}
的含义。
谢谢!
 楼主| 发表于 2004-7-20 20:17:31 | 显示全部楼层
错误提示如下:
sed: Command garbled (extra characters): /hello/{N:/my dear/d}
发表于 2004-7-20 22:45:40 | 显示全部楼层
见上,已经编辑修改,:sorry,我没有M$环境!
 楼主| 发表于 2004-7-21 13:41:14 | 显示全部楼层
谢谢KornLee!
问题,已经搞定了,还是和上次提问的一样,是版本的问题。
换成”GNU sed version 4.0.9“就没问题。
我想知道“{N:/my dear/d}”里面的"N;"是不是下一行的意思?
谢谢!
 楼主| 发表于 2004-7-21 13:43:31 | 显示全部楼层
有没有sed.exe的手册,我从sourceforge上下载下来的帮助文档,
及其简单。没有范例程序。只是一些概要说明。
如有的话,可否提供下?
谢谢!
发表于 2004-7-21 15:58:46 | 显示全部楼层
坛子里有很多sed的文章,精华区里也有,找找看 :thank
发表于 2004-7-22 13:24:34 | 显示全部楼层
try awk:[php]
awk '/hello,world/{n=NR+1}NR!=n' file[/php]
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表