免费注册 查看新帖 |

Chinaunix

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

这样的sed怎么写!!! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-04-24 20:11 |只看该作者 |倒序浏览
假如我现在有这样的文本,
/*kjakkjakjdkfl
   kajskldjflkasjfklj
  kakjkfja lkjlkjkl jklj*/
我现在想删除/*.....*/之间的部分,用sed可以吗??

论坛徽章:
0
2 [报告]
发表于 2004-04-24 20:51 |只看该作者

这样的sed怎么写!!!


  1. sed  '/\/\*/,/\*\//d' file
复制代码

不能保证对于所有情况都正确。如果/*前面和*/后面同一行上有内容,也会被删掉。

论坛徽章:
0
3 [报告]
发表于 2004-04-24 21:52 |只看该作者

这样的sed怎么写!!!

可以先把所有的回车换成一个标识,如#之类的,然后用sed删除/*...*/的行,最后把标识符再替换成回车

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
4 [报告]
发表于 2004-04-24 22:01 |只看该作者

这样的sed怎么写!!!

  1. sed '/^\/\*/,/\*\/$/d' filename
复制代码

论坛徽章:
0
5 [报告]
发表于 2004-04-24 22:49 |只看该作者

这样的sed怎么写!!!

又长又臭:
sed 's/\/\*[^\*\/]*\*\///g' filename |sed '/[]*\/\*/,/\*\/[:
space:]*/d'|grep -v '^$'
p.s: /* */ 里没有 * or /

论坛徽章:
0
6 [报告]
发表于 2004-04-25 00:16 |只看该作者

这样的sed怎么写!!!

来个tr+grep的
文件:file
cat file
/*kjakkjakjdkfl
kajskldjflkasjfklj
kakjkfja lkjlkjkl jklj*/
sdfs
asdfjs;d
/*alsfjdlasdfls
asdfsjdf
asdfsad


  asdfj
  sdfjlsjfdjs;adf*/

  1. $\
  2. >cat file|tr '\n' '#'|tr '/' '\n'|grep -v ^\*|tr '#' '\n'|grep '[a-z]'
  3. sdfs
  4. asdfjs;d
复制代码

论坛徽章:
0
7 [报告]
发表于 2004-04-25 01:05 |只看该作者

这样的sed怎么写!!!

厉害!!!
如有/在 /* */中间....

论坛徽章:
0
8 [报告]
发表于 2004-04-25 01:46 |只看该作者

这样的sed怎么写!!!

$cat file
/*kjakkjakjdkfl
kajskldjflkasjfklj
kakjkfja lkjlkjkl jklj*/
sdfs
asdfjs;d
/*alsfjdlasdfls
asdfsjdf/
as/dfsad
  /
/
  asdfj
  sdfjlsjfdjs;adf*/

  1. $\
  2. >cat file|tr -d '/'|tr '\n' '#'|tr '*' '\n'|grep ^#|tr '#' '\n'|grep '[a-z]'
  3. sdfs
  4. asdfjs;d
复制代码

ps:当然,还是AD版主的最好了,,我这个有局限性

论坛徽章:
0
9 [报告]
发表于 2004-04-25 11:01 |只看该作者

这样的sed怎么写!!!

不好意思,偶又要来点评点评了。
/*和*/是c语言程序中 的注释符号,这之间的内容是注释部分,因此c程序员经常有把这之间的内容删除的需求。要注意的是,/*不一定是顶格,*/也不一定跟着回车。在/*前面和*/后面都可能有程序内容,这是不应该被删除掉的。还有,删除掉注释以后程序不能少了部件也不能多了部件,注释前后如果没有非空格字符的,要一起删除,若是其它字符再加上空格,就不应该删除。
比如我有程序代码test.c,请注意程序里面的汉字注释:

  1. $cat test.c
  2. #include <stdio.h>
  3. main()
  4. {
  5.         /*需要整行删除*/
  6.         printf("本句和注释之间的空格不要去掉\n");         /*just a test
  7.         ******需要整行删除
  8.         /////需要整行删除
  9.         需要整行删除,后面空行不要删除*/

  10.         printf("汉字不能被删除\n");

  11. /*test  注意前面空行不能删除
  12. */         printf("test:前面的空格不要去掉\n");/*a
  13. */printf("test3\n");
  14.         return(0);
  15. }
复制代码

理想情况的输出应该是

  1. #include <stdio.h>
  2. main()
  3. {
  4.         printf("本句和注释之间的空格不要去掉\n");         

  5.         printf("汉字不能被删除\n");

  6.          printf("test:前面的空格不要去掉\n");
  7. printf("test3\n");
  8.         return(0);
  9. }
复制代码

这种情况,上面所有人包括我和ad、MM的代码都不能够正确处理。
就当是出个题目,大家再研究研究?呵呵。
程序中的空格和tab很重要,测试大家的代码是否正确,请跟贴者不要随便去掉。

论坛徽章:
0
10 [报告]
发表于 2004-04-25 11:19 |只看该作者

这样的sed怎么写!!!

厉害!!!!
学习。。。。。。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP