Chinaunix

标题: sed提取指定行前面第5行的内容~ [打印本页]

作者: yuloveban    时间: 2013-08-15 09:25
标题: sed提取指定行前面第5行的内容~
工作当中遇到一个问题,  有很多的文本,大概一个小时一个,要提取里面的一个数据, 这个数据在<huaxing> 这一行的前面第5行,刚刚我尝试用awk是可以提取出来的, 但是sed死活都弄不出来, 请看官们帮忙看看的~
如下文件:

2013081507.txt

.....
754
x
eqio
lda
lgiqo
<huaxing>
......
要提取754这个值~~
作者: 代号:军刀    时间: 2013-08-15 09:43
本帖最后由 代号:军刀 于 2013-08-15 09:45 编辑
  1. sed -r ':1;N;/<huaxing>/!b1;s/.*\n([^\n]+)((\n[^\n]+){5})/\1/'
复制代码

作者: 心乃南部之星    时间: 2013-08-15 09:55
回复 2# 代号:军刀


    这样会把754前面的数据同时取出来吧
作者: WilliBhamlll    时间: 2013-08-15 09:56
  1. sed -nr 'H;/<huaxing>/{x;s///;s/.*\n(.*)(.*\n){5}/\1/p}' file
  2. 754
复制代码

作者: 代号:军刀    时间: 2013-08-15 10:28
回复 3# 心乃南部之星

    不是把754之前的行取出来,是会多打印huaxing后面的行
  1. sed -nr ':1;N;/<huaxing>/!b1;s/.*\n([^\n]+)((\n[^\n]+){5})/\1/p'
复制代码

作者: HH106    时间: 2013-08-15 11:22
grep效率比sed高
作者: 心乃南部之星    时间: 2013-08-15 11:32
回复 4# WilliBhamlll


   请问代码里 s/// 这句的作用是什么
作者: 代号:军刀    时间: 2013-08-15 11:34
回复 7# 心乃南部之星


    就是把<huaxing>替换为空
作者: 心乃南部之星    时间: 2013-08-15 14:40
回复 8# 代号:军刀


    我就是不明白s/// 怎么会把<huaxing>替换为空,还请解释下
作者: 代号:军刀    时间: 2013-08-15 16:05
回复 9# 心乃南部之星


    [address]s/pattern/replacement/flags
    替换命令应用于与address匹配的行。如果没有指定地址,那么就应用于Pattern匹配的行。如果正则表达式作为地址来提供,并且没有指定模式,那么替换命令匹配由地址匹配的内容。     --出处:sed & awk
作者: 心乃南部之星    时间: 2013-08-15 16:39
回复 10# 代号:军刀


    终于明白了,看书不仔细。。多谢!
作者: gc40800    时间: 2013-09-09 23:47
本帖最后由 gc40800 于 2013-09-09 23:48 编辑

fgrep -B 5  '<huaxing>'  2013081507.txt | head -1
作者: reb00t    时间: 2013-09-10 00:15
回复 1# yuloveban


    比较喜欢 grep ..
grep -B  5  '<huaxing>'  1.txt |head  -n 1




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