LinuxSir.cn,穿越时空的Linuxsir!

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

如何利用sed将从第5行到第3次出现north的行之间所有行拷贝出来

[复制链接]
发表于 2009-1-18 02:10:57 | 显示全部楼层 |阅读模式
RT!


sed '5,/^north/p' datafile > newfile

是将第5行到第一个north开头的内容导出到newfile中,现在求问如何将从第5行到第三次出现的north开头行取出来呢?
发表于 2009-1-18 12:46:56 | 显示全部楼层

  1. perl -n -e ' if(/north/){ if(++$N{north} > 3){ exit } }; if($. >=5 ){ print }' Ur_File
复制代码
回复 支持 反对

使用道具 举报

发表于 2009-1-21 22:54:18 | 显示全部楼层
sed -n '5{:a;p;/^north/{x;s/^/./;/.\{3\}/t;x};n;ba}' urfile
回复 支持 反对

使用道具 举报

发表于 2009-1-21 23:57:24 | 显示全部楼层
ly,又跟你来这学习了
前两天看了这贴,想了一个,

sed -n '5{:a;N;s/\nnorth/&/3;tb;ba;:b;p;q}' urfile

因为不知好不好,没敢发,如你看到请指教一二:
这种不断“N”的方法,会不会效率低?
如果第3个north很久才出现,会不会有问题?
谢谢!
回复 支持 反对

使用道具 举报

发表于 2009-1-22 00:20:46 | 显示全部楼层
刚才的方法确实有问题,如果第三个出现得早还能处理,如果第三个出现得晚,就很费资源了
回复 支持 反对

使用道具 举报

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

本版积分规则

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