在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
12
返回列表 发新帖
楼主: 午后乐天派

[求助] 同样的查找替换,为什么在shell下和tclsh下完全不同呢,求指导

[复制链接]
 楼主| 发表于 2017-8-2 13:55:59 | 显示全部楼层
法第三方第三方的防守打法
 楼主| 发表于 2017-8-7 10:36:42 | 显示全部楼层
我已经知道答案了,找到高人了
发表于 2017-8-18 14:08:13 | 显示全部楼层
回复 12# 午后乐天派


   
请问 能把问题答案总结一下么?
发表于 2017-9-5 22:02:07 | 显示全部楼层
这个自己没有tcl环境,也不怎么用tcl。不过,可以提供个思考的思路。
在python的正则表达式里面,每次使用re.compile的时候都要用原始字符串,为了防止字符串向函数传递时对特殊字符进行转义。举个栗子:'\/'在python里面会被传递为'/',而r'\/'传递过去还是'\/'。而如果传递过去'/'的话是无法匹配'/'的。如果字符串前面不加r的话,需要对转移的'\‘字符前面加’\',这样re.compile(r'\/')和re.compile('\\\/')基本上是差不多的。
所以,我猜测在tcl的替换中也是发生了两次转义,而在命令里面只防止了一次转义的情况。python里面有字符串前加r的方法,tcl里面估计应该也有相应的方法。如果没有就只能用麻烦的方法,进行两次转义了。
发表于 2018-2-13 23:47:59 | 显示全部楼层
grep ,sed,awk 都用单引号包起来就ok,不要太纠结。
遇到要替换特殊符号/时,用?当分隔符比较好吧,下面这个应该ok。
grep ’variable' b.txt | sed -e 's/variable//g' -e 's/\"//g' -e 's?//testing??g'
你第三个问题替换时少写了一个/
发表于 2018-2-22 17:12:05 | 显示全部楼层
example :
exec sed -i {s/hello linux/hello fedora/g} /root/textfile
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

×

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-20 04:48 , Processed in 0.019741 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表