使用TCL替换文件中无法识别的字符

时间:2012-09-29 13:29:24

标签: tcl

我正在编写一个脚本来读取文件并替换一些包含无法识别的字符的字符,例如

"^H^H^H^H^H^H^H^H^H"

实际上,这个文件是通过重定向telnet会话的控制台输出生成的。我想删除这个角色。我必须从文件中删除" - More ---"

我尝试使用

替换它们
set fileID [open "bar" r]
set temp [open "temp.txt" w+]
while {[eof $fileID] != 1} {
    gets $fileID lineInfo
    regsub -all "More" $lineInfo "" lineInfo
    regsub -all "--More--" $lineInfo "" lineInfo  #This is not working
    puts $temp $lineInfo
}

我可以删除"更多",但我无法删除" - 更多 - "。有人可以解释一下吗?

我也尝试了

regsub -all "^H^H^H^H^H^H^H^H^H" $lineInfo "" lineInfo  #This is also not working

这也行不通。

提前致谢。

1 个答案:

答案 0 :(得分:5)

我建议您在正则表达式中使用:print:字符类来匹配所有“明智”字符 - 请参阅re_syntax manual page

regsub的调用应该用空字符串替换所有不可打印的字符,因此我们使用一个否定的字符类(通过^),因此正确的咒语将如下所示:< / p>

set lineInfo [regsub -all {[^[:print:]]} $lineInfo ""]

至于删除“--More--”“ - 我有两个假设:

  • regsub混淆将--More--视为一个开关,因为它以短划线开头。通过在所有切换后将--传递给regsub,可以轻松解决此问题 - 请参阅manual page
  • 您在文件中显示的“ - More--”实际上并不是一个实心字符串,并且它中嵌入了某些不可打印的字符。调试此类情况的常用方法是使用HEX-dumper(如xxd或HEX-editor / viewer)检查文件。