LinuxSir.cn,穿越时空的Linuxsir!

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

请教 如何删除2个关键字中间所有的行

[复制链接]
发表于 2006-3-29 19:22:22 | 显示全部楼层 |阅读模式



start
xx
xx
xx
xxxx
xxxxx
.
.
.
end
删除 start与end中间的行
发表于 2006-3-29 20:33:40 | 显示全部楼层
sed -n -e '1,/start/p' -e '/end/,$p' somefile

只有一对匹配,这个就够了。
回复 支持 反对

使用道具 举报

发表于 2006-4-2 11:14:19 | 显示全部楼层
sed '/start/,/end/d' file
回复 支持 反对

使用道具 举报

发表于 2006-4-2 18:11:15 | 显示全部楼层
连start,end一起删了。
回复 支持 反对

使用道具 举报

发表于 2006-4-3 09:54:41 | 显示全部楼层
cat file|egrep (start|end)> some.file
这样可以吗。呵呵
回复 支持 反对

使用道具 举报

发表于 2006-4-4 00:18:53 | 显示全部楼层
Is there only one pair of "start/end" or there are many?
回复 支持 反对

使用道具 举报

发表于 2006-4-5 10:24:16 | 显示全部楼层
Post by axl_chan
sed '/start/,/end/d' file

这样的话连start和end都删了哦~~~
能不能删除之后再强制print "start"和"end"出来?
这样的话就变成了:
sed  -e  '/start/,/end/d' file;
sed  -e  '/sart/p', -e '/end/'p file;

不知道行不行,没有实验过.:ask
回复 支持 反对

使用道具 举报

发表于 2006-4-5 10:48:16 | 显示全部楼层
可以先分别在begin下和end上添加一特殊行,再删除这些特殊行之间的部门,代码如下:

  1. #!/bin/sed -f
  2. #filename: add.sh
  3. /start/  a\
  4. begin
  5. /end/   i\
  6. nigeb
复制代码

  1. ./add.sh file |sed '/begin/,/nigeb/d'
复制代码
回复 支持 反对

使用道具 举报

发表于 2006-4-5 11:20:23 | 显示全部楼层
那还不如直接echo "start">file;echo "end">>file呢
回复 支持 反对

使用道具 举报

发表于 2006-4-5 12:59:07 | 显示全部楼层
一个方法:

sed -n '/start/,/end/c\
start\
end\
'
还可以在vi中这样:

: /start/+1, /end/-1 d
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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