免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4050 | 回复: 17
打印 上一主题 下一主题

sed 当前结果的下一行,怎么标识 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-07-21 13:44 |只看该作者 |倒序浏览
各位:
请问一个问题:
假设现在我对一个文件中的一段进行处理。我是用sed来做的,但是我不知道怎样处理该范围的下一行,怎么表示。
sed -n "${li},/END FUNCTION/p" $1
以上是从$li行,到第一个END FUNCTION的地方显示出来,但是我的程序余下的东西还有很多,我还想做不同的处理。怎么表示上面范围的下一行,没有特殊的字符可以确认。
谢谢。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2003-07-21 15:42 |只看该作者

sed 当前结果的下一行,怎么标识

这个试试看:
  1. a=`sed -n '/END FUNCTION/='  $1`
  2. a=`expr $a + 1`
  3. sed -n "${a}p"
复制代码

论坛徽章:
0
3 [报告]
发表于 2003-07-21 15:43 |只看该作者

sed 当前结果的下一行,怎么标识

是否可以这样来考虑:
    如果对文件是分段处理的话,可以将处理完的行直接删除,这样每次处理都从第一行开始。

论坛徽章:
0
4 [报告]
发表于 2003-07-21 16:03 |只看该作者

sed 当前结果的下一行,怎么标识

只用sed好象不行。

论坛徽章:
0
5 [报告]
发表于 2003-07-21 18:12 |只看该作者

sed 当前结果的下一行,怎么标识

To admirer:
   程序中有很多END FUNCTION,你的方法会找出全部的行号,不行。
To smileinwind
   我不知道行号,不知道怎样做差集
To 夜未眠
   也可以不是sed,只要实现,在实现的基础上再加点效率 ,就更好了。

各位:加油,waiting on line

论坛徽章:
0
6 [报告]
发表于 2003-07-21 18:30 |只看该作者

sed 当前结果的下一行,怎么标识

cat -n filename|sed -n '1,/xxx/p'
这样行不?

论坛徽章:
0
7 [报告]
发表于 2003-07-21 22:27 |只看该作者

sed 当前结果的下一行,怎么标识

valentine 20020822发表的一个列子
svmon -P|sed '/PID/{N;p;}'

管道后的就是楼主所需功能,可我也没成功,还得请教高手,谢谢!

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
8 [报告]
发表于 2003-07-21 22:58 |只看该作者

sed 当前结果的下一行,怎么标识

原帖由 "carrierye" 发表:
To admirer:
   程序中有很多END FUNCTION,你的方法会找出全部的行号,不行。
   
程序中有很多END FUNCTION?
那你要第几个?
从你使用sed命令看,你需要的是第一个
对上面代码作如下修改即可
  1. a=`sed -n '/END FUNCTION/{=;q;}'  $1`
  2. a=`expr $a + 1`
  3. sed -n "${a}p"
复制代码

论坛徽章:
0
9 [报告]
发表于 2003-07-21 23:37 |只看该作者

sed 当前结果的下一行,怎么标识

测试
将匹配范围后的所有文本加上 ' ->',这只是一个例子,具体要作如何处理你可以自己改一下。

shell script

  1. #!/bin/sh
  2. if [ -z $1 ];then echo lost param.;exit 1;fi

  3. cat 1.txt |\
  4. awk "/$1/,/EndLine/{\
  5. print;\
  6. if(/EndLine/){sem=1;next}\
  7. };\
  8. sem==1{printf(\"-> %s\n\",\$0)}"
复制代码


1.txt文件内容

  1. $ cat 1.txt
  2. hello
  3. EndLine
  4. windows
  5. done
  6. EndLine
  7. world
  8. can
  9. doit
  10. EndLine
  11. This line will continue
  12. EndLine
  13. 002 40 400
  14. done
  15. $
  16. $ ./test.sh world
  17. world
  18. can
  19. doit
  20. EndLine
  21. -> This line will continue
  22. -> EndLine
  23. -> 002 40 400
  24. -> done
  25. $ ./test.sh windows
  26. windows
  27. done
  28. EndLine
  29. -> world
  30. -> can
  31. -> doit
  32. -> EndLine
  33. -> This line will continue
  34. -> EndLine
  35. -> 002 40 400
  36. -> done
  37. $
复制代码
sherwinshan 该用户已被删除
10 [报告]
发表于 2003-07-22 00:55 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP