免费注册 查看新帖 |

Chinaunix

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

在sed中,找到一行后,如何删除随后的指定数目的行 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-07-04 11:03 |只看该作者 |倒序浏览
例如有一个函数
static int test()
{
....
...
}
如何注释或者删除这个函数呢?

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

在sed中,找到一行后,如何删除随后的指定数目的行

如果你的C代码写的很规范的化,可以这样作,否则,另想办法吧:
  1. sed '/^static int test/,/^}/s:^://\*  :' file >newfile
复制代码

论坛徽章:
0
3 [报告]
发表于 2003-07-04 14:01 |只看该作者

在sed中,找到一行后,如何删除随后的指定数目的行

这个,好像不行吧?万一在test之前还有其他函数呢?
不知道其他工具可不可以

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

在sed中,找到一行后,如何删除随后的指定数目的行

# cat file
aaa
bbb
ccc
ddd
eee
ddd
fff
# sed /^bbb$/,/^ddd$/d file
aaa
eee
ddd
fff

论坛徽章:
0
5 [报告]
发表于 2003-07-04 14:32 |只看该作者

在sed中,找到一行后,如何删除随后的指定数目的行

原帖由 "txftxf" 发表:
例如有一个函数
static int test()
{
....
...
}
如何注释或者删除这个函数呢?
   
这个基本上很麻烦,以前用VC做过类似的东西,方法是:首先找到函数声明行,然后声明一个统计括号的变量,给初值0,然后再去下边数大括号的数,遇到左大括号(不在#,/*和printf中的字符串中......)就把一个统计的变量加一,遇到右括号(不在#,/*和printf中的字符串中......)就减一.当第一次遇到"}"切累计括号的变量为零的情况下就找到了该函数的所有行了~~~比较笨的方法~~~
不知道大家有没有好的办法~~(以上方法,也是你程序必须符合规范~)

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

在sed中,找到一行后,如何删除随后的指定数目的行

原帖由 "txftxf" 发表:
这个,好像不行吧?万一在test之前还有其他函数呢?
不知道其他工具可不可以

你的程序中可能包含两个以上的test函数?

论坛徽章:
0
7 [报告]
发表于 2003-07-04 14:48 |只看该作者

在sed中,找到一行后,如何删除随后的指定数目的行

刚学sed试用一下:)
  1. echo "Input the count:\c"
  2. read a
  3. b=`sed -n '/tatic int test/=' file`
  4. sed "$b,`expr $b + $a`d" file
复制代码

论坛徽章:
0
8 [报告]
发表于 2003-07-04 16:13 |只看该作者

在sed中,找到一行后,如何删除随后的指定数目的行

加注释不好做,但是删除还是比较容易了,呵呵,谢谢大家
/^static int test()$/,/^}$/d
刚刚找到一份比较完整的sed 文档,共享之
http://www.cornerstonemag.com/sed/

论坛徽章:
0
9 [报告]
发表于 2003-07-04 16:29 |只看该作者

在sed中,找到一行后,如何删除随后的指定数目的行

原帖由 "txftxf" 发表:
加注释不好做,但是删除还是比较容易了,呵呵,谢谢大家
/^static int test()$/,/^}$/d
刚刚找到一份比较完整的sed 文档,共享之
http://www.cornerstonemag.com/sed/

还好,第二个地址匹配的时候是匹配到第一个为止,如果是按照最大匹配的话可就惨了~~当初就以为是按照最大匹配,所以没有用SED,没想到刚才实验不时按照最大匹配~~~~~~

论坛徽章:
0
10 [报告]
发表于 2003-07-04 16:50 |只看该作者

在sed中,找到一行后,如何删除随后的指定数目的行

In address ranges with /regex/ as <address2>, the range "/foo/,/bar/" will stop at the first "bar" it finds, provided that "bar" occurs on a line below "foo". If the word "bar" occurs on several lines below the word "foo", the range will match all the lines from the first "foo" up to the first "bar". It will not continue hopping ahead to find more "bar"s. In other words, address ranges are not "greedy," like regular expressions.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP