免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3861 | 回复: 15

一个sed文本处理问题 处理c语言的include语句 [复制链接]

论坛徽章:
1
寅虎
日期:2014-11-30 21:25:54
发表于 2009-04-29 10:41 |显示全部楼层
20可用积分
原来的代码是在windows下写的 所以有一些这样的语句
#include "src\mod\fun.h"
我现在想把上面的语句换成下面的语句
#if defined(unix)
#include "src/mod/fun.h"
#else
#include "src\mod\fun.h"
#endif

代码有几十个文件 我一个一个的去改够搞一天了 所以大家帮帮忙啊
还有一点 原来代码是dos格式 所以处理后最好也是dos格式  先谢谢了

[ 本帖最后由 vbs100 于 2009-4-29 10:48 编辑 ]

最佳答案

查看完整内容

那就根据你的要求修改一下吧。也不知道你的dos路径是什么格式的,包含\的?:dos格式修正.[ 本帖最后由 blackold 于 2009-4-29 11:40 编辑 ]

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
发表于 2009-04-29 10:41 |显示全部楼层

回复 #8 vbs100 的帖子

那就根据你的要求修改一下吧。也不知道你的dos路径是什么格式的,包含\的?:
  1. sed -b '/^#include .*\\/{h;s/\\/\//g;s/.*/#if define(unix)\r\n&\n#else\r/;G;s/$/\n#endif\r/}'  ....
复制代码


dos格式修正.

[ 本帖最后由 blackold 于 2009-4-29 11:40 编辑 ]

论坛徽章:
1
巨蟹座
日期:2014-06-04 13:33:30
发表于 2009-04-29 10:51 |显示全部楼层
啥意思?
出现这一句:#include "src\mod\fun.h"
换成:
#if defined(unix)
#include "src/mod/fun.h"
#else
#include "src\mod\fun.h"
#endif

还是if不换,遇到else才换?

论坛徽章:
1
巨蟹座
日期:2014-06-04 13:33:30
发表于 2009-04-29 10:53 |显示全部楼层
root@debian:~# cat hi
#if defined(unix)
#include "src/mod/fun.h"
#else
#include "src\mod\fun.h"
#endif


root@debian:~# sed '/else/{n;s/\\/\//g}' hi
#if defined(unix)
#include "src/mod/fun.h"
#else
#include "src/mod/fun.h"
#endif

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
发表于 2009-04-29 10:56 |显示全部楼层
try:
  1. sed -b '/^#include/{h;s/\\/\//g;s/.*/#if define(unix)\n&\n#else/;G;s/$/\n#endif/}' urfile > newfile
复制代码


多文件处理(gsed):
  1. for f in files;do sed -i -b '/^#include/{h;s/\\/\//g;s/.*/#if define(unix)\n&\n#else/;G;s/$/\n#endif/}' urfile;done
复制代码


多谢LZ指正!

[ 本帖最后由 blackold 于 2009-4-29 11:16 编辑 ]

论坛徽章:
1
寅虎
日期:2014-11-30 21:25:54
发表于 2009-04-29 10:56 |显示全部楼层
就是一句变五句 我在做代码移植 以前没做过 如果有其它方法解决头文件的问题也可以

论坛徽章:
1
寅虎
日期:2014-11-30 21:25:54
发表于 2009-04-29 11:05 |显示全部楼层

回复 #4 blackold 的帖子

有点看懂了 我先试下 还有个问题 -i  和 -b 连写会不会把 b 当成 -i  有参数?

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
发表于 2009-04-29 11:09 |显示全部楼层

回复 #5 vbs100 的帖子

嗯。是我的疏忽,应该分开写。

论坛徽章:
1
寅虎
日期:2014-11-30 21:25:54
发表于 2009-04-29 11:11 |显示全部楼层

回复 #4 blackold 的帖子

sed -b '/^#include/{h;s/\\/\//g;s/.*/#if define(unix)\n&\n#else/;G;s/$/\n#endif/}' urfile > newfile


这个好像有点问题 它把所以的include都换了 而我想的是只替换包含windows路径的行
我本以为要用sed a i 这些命令 没想到黑哥这样也做出来了 厉害

论坛徽章:
0
发表于 2009-04-29 11:12 |显示全部楼层

回复 #4 blackold 的帖子

试了一下,很好用。
请问黑哥,中间那个G是什么含义
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP