返回列表 发帖

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

法第三方第三方的防守打法

TOP

我已经知道答案了,找到高人了

TOP

回复 12# 午后乐天派


   
请问 能把问题答案总结一下么?

TOP

这个自己没有tcl环境,也不怎么用tcl。不过,可以提供个思考的思路。
在python的正则表达式里面,每次使用re.compile的时候都要用原始字符串,为了防止字符串向函数传递时对特殊字符进行转义。举个栗子:'\/'在python里面会被传递为'/',而r'\/'传递过去还是'\/'。而如果传递过去'/'的话是无法匹配'/'的。如果字符串前面不加r的话,需要对转移的'\‘字符前面加’\',这样re.compile(r'\/')和re.compile('\\\/')基本上是差不多的。
所以,我猜测在tcl的替换中也是发生了两次转义,而在命令里面只防止了一次转义的情况。python里面有字符串前加r的方法,tcl里面估计应该也有相应的方法。如果没有就只能用麻烦的方法,进行两次转义了。

TOP

grep ,sed,awk 都用单引号包起来就ok,不要太纠结。
遇到要替换特殊符号/时,用?当分隔符比较好吧,下面这个应该ok。
grep ’variable' b.txt | sed -e 's/variable//g' -e 's/\"//g' -e 's?//testing??g'
你第三个问题替换时少写了一个/

TOP

example :
exec sed -i {s/hello linux/hello fedora/g} /root/textfile

TOP

返回列表

站长推荐 关闭


瑞狗迎春--eetop摄影板块第五届春节&元宵节摄影大赛,现金大奖等你拿!!

瑞狗迎春--eetop摄影板块第五届春节&元宵节摄影大赛,现金大奖等你拿!!


查看