免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: carrierye
打印 上一主题 下一主题

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

论坛徽章:
0
11 [报告]
发表于 2003-07-22 02:18 |只看该作者

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

我认为关键是求出匹配模式的行号即可!

论坛徽章:
0
12 [报告]
发表于 2003-07-22 09:20 |只看该作者

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

  1. cat -n filename|sed -n '1,/xxx/p'
  2. 这样行不?
复制代码

加些东西就可以了
  1. cat -n filename | sed -n "${li},/END FUNCTION/"p | awk '{print $1}' | sed -n "$,$"p
复制代码

这个我试过了。

  1. valentine 20020822发表的一个列子
  2. svmon -P|sed '/PID/{N;p;}'
复制代码

这个不会玩。
To admirer:

  1. 程序中有很多END FUNCTION?
  2. 那你要第几个?
  3. 从你使用sed命令看,你需要的是第一个
  4. 对上面代码作如下修改即可
复制代码

并不是第一个,而是从上面我写的那行开始后的第一行,我试了你的shell,它会找出第一行。
但是如果我a=`sed -n "203,/END FUNCTION/{=;q;}" filename`,203是我开始的行,在上面我是用
变数替换的,这里我就直接用了,它报给我的$a=203,不过不懂{=;q;},你能讲讲吗?
To 夜未眠
  你传的$1是一个字符匹配形式,而我传的是一个行号,不过这个可以通过NR来处理,我想。启发。
To sherwinshan
  我想在程序里判断一下,我想可以这样用了。


chinaunix的好人真是多啊。
谢谢各位了。

论坛徽章:
0
13 [报告]
发表于 2003-07-22 09:24 |只看该作者

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

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


不用做差集,在sed -n "${li},/END FUNCTION/p" $1 处理完后加一语句:
sed "${li},/END FUNCTION/d " $1 > tempfile
在${li}之前行也做这样处理的前提下,tempfile的第一行就是所谓的下一行。
建议程序开头给$1做个拷贝,所有的操作都在临时文件上做。

论坛徽章:
0
14 [报告]
发表于 2003-07-22 12:03 |只看该作者

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

  1.   不用做差集,在sed -n "${li},/END FUNCTION/p" $1 处理完后加一语句:
  2. sed "${li},/END FUNCTION/d " $1 > tempfile
  3. 在${li}之前行也做这样处理的前提下,tempfile的第一行就是所谓的下一行。
  4. 建议程序开头给$1做个拷贝,所有的操作都在临时文件上做
  5.    
复制代码


收到,谢谢。

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

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

原帖由 "carrierye" 发表:
并不是第一个,而是从上面我写的那行开始后的第一行,我试了你的shell,它会找出第一行。
但是如果我a=`sed -n "203,/END FUNCTION/{=;q;}" filename`,203是我开始的行,在上面我是用
变数替换的,这里我就直接用了..........
   
a=`sed -n '/END FUNCTION/{=;q;}'  $1`
a=`sed -n "203,/END FUNCTION/{=;q;}" filename`
这两行是有本质差别的,第一行是取第一个END FUNCTION所在行的行号;第二行的结果肯定是203!
{=;q;}的含义是,取第一个匹配行的行号(=)然后退出(q)。

论坛徽章:
0
16 [报告]
发表于 2003-07-22 14:17 |只看该作者

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

To admirer兄:
  1.   这两行是有本质差别的,第一行是取第一个END FUNCTION所在行的行号;第二行的结果肯定是203!
  2. {=;q;}的含义是,取第一个匹配行的行号(=)然后退出(q)。


  3.    
复制代码


那么怎么实现从某行之后开始的第一个这样的问题呢?

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

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

原帖由 "carrierye" 发表:
各位:
请问一个问题:
假设现在我对一个文件中的一段进行处理。我是用sed来做的,但是我不知道怎样处理该范围的下一行,怎么表示。
sed -n "${li},/END FUNCTION/p" $1
以上是从$li行,到第一个END FUNCTION的..........

该范围的下一行  
  1. a=`sed -n "${li},/END FUNCTION/=" $1|sed -n $p`
  2. a=`expr $a + 1`
  3. sed -n "${a}p" $1
复制代码

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

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

thks to everyone.     
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP