免费注册 查看新帖 |

Chinaunix

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

求表达式的写法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-23 22:17 |只看该作者 |倒序浏览
我现在有个文件,a.cpp,我现在需要把文件中的所有
p += n;

替换成

POINT_MOVE(p, n);

这里,POINT_MOVE是一个宏。n可能是任意数字,也可能是一个变量。求替换的正则表达式。

论坛徽章:
0
2 [报告]
发表于 2009-07-23 22:43 |只看该作者
gsed 's/p += \(.*\);/POINT_MOVE(p, \1);/g'

论坛徽章:
0
3 [报告]
发表于 2009-07-27 16:47 |只看该作者

sed用法?

我现在有个文件,a.cpp,我现在需要把文件中的所有
p += n;
替换成
POINT_MOVE(p, n);
这里,POINT_MOVE是一个宏。n可能是任意数字,也可能是一个变量。求替换的正则表达式。
[root@128 tmp]# sed  's/p+=[0-9]+;/POINT_MOVE(p,\1);/g' file
sed:-e 表达式 #1,字符 32:invalid reference \1 on `s' command's RHS

论坛徽章:
0
4 [报告]
发表于 2009-07-27 16:49 |只看该作者

sed用法?

我现在有个文件,a.cpp,我现在需要把文件中的所有
p += n;
替换成
POINT_MOVE(p, n);
这里,POINT_MOVE是一个宏。n可能是任意数字,也可能是一个变量。求替换的正则表达式。
[root@128 tmp]# sed  's/p+=[0-9]+;/POINT_MOVE(p,\1);/g' file
sed:-e 表达式 #1,字符 32:invalid reference \1 on `s' command's RHS

论坛徽章:
0
5 [报告]
发表于 2009-07-27 16:50 |只看该作者
原帖由 over12 于 2009-7-27 16:47 发表
我现在有个文件,a.cpp,我现在需要把文件中的所有
p += n;
替换成
POINT_MOVE(p, n);
这里,POINT_MOVE是一个宏。n可能是任意数字,也可能是一个变量。求替换的正则表达式。
[root@128 tmp]# sed  's/p ...



二楼的已经可以达到你的要求了

论坛徽章:
0
6 [报告]
发表于 2009-07-27 16:51 |只看该作者

回复 #5 00306 的帖子

我的机器提示没有gsed这条命令啊?
[root@128 tmp]# gsed
-bash: gsed: command not found
再说他的那种写法我不理解!

论坛徽章:
0
7 [报告]
发表于 2009-07-27 16:57 |只看该作者
  1. awk -F'[+=|;]' '{if($0~/p ?\+\=/){print "POINT_MOVE("$1","$3");"}else{print $0}}' urfile
复制代码

论坛徽章:
0
8 [报告]
发表于 2009-07-27 17:00 |只看该作者

回复 #7 aboy11 的帖子

if($0~/p ?\+\=/)  这句不是很懂?

论坛徽章:
0
9 [报告]
发表于 2009-07-27 17:02 |只看该作者

回复 #8 over12 的帖子

匹配p+=或者p +=啊

论坛徽章:
0
10 [报告]
发表于 2009-07-27 17:06 |只看该作者
原帖由 over12 于 2009-7-27 16:51 发表
我的机器提示没有gsed这条命令啊?
[root@128 tmp]# gsed
-bash: gsed: command not found
再说他的那种写法我不理解!



  1. [root@lsmqy ~]# cat 2.txt
  2. p += aaa;
  3. p += 123546;
  4. p += abcde;
  5. [root@lsmqy ~]# sed 's/p += \(.*\);/POINT_MOVE(p, \1);/g' 2.txt
  6. POINT_MOVE(p, aaa);
  7. POINT_MOVE(p, 123546);
  8. POINT_MOVE(p, abcde);
复制代码


查到p + =   并将=后面的字符存储起来作为标签1,POINT_MOVE(p, \1)  后面这个\1就是调用前面存储的标签1,sed最多可以存储9个这样的标签
  1. echo "abc123"|sed 's/abc\(123\)/\1456/'
  2. 123456
复制代码

这样应该更清楚一些吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP