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

Din*_*esh 1 tcl

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

"^H^H^H^H^H^H^H^H^H"
Run Code Online (Sandbox Code Playgroud)

实际上,这个文件是通过重定向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
}
Run Code Online (Sandbox Code Playgroud)

我可以删除"更多",但我无法删除" - 更多 - ".任何人都能解释一下吗?

我也尝试过

regsub -all "^H^H^H^H^H^H^H^H^H" $lineInfo "" lineInfo  #This is also not working
Run Code Online (Sandbox Code Playgroud)

这也行不通.

提前致谢.

kos*_*tix 5

我建议:print:您在正则表达式中使用字符类来匹配所有"明智"字符 - 请参阅re_syntax手册页.

结果调用regsub应该用空字符串替换所有不可打印的字符,因此我们使用否定字符类(via ^),因此正确的咒语将如下所示:

set lineInfo [regsub -all {[^[:print:]]} $lineInfo ""]
Run Code Online (Sandbox Code Playgroud)

至于删除" - 更多 - "" - 我有两个假设:

  • regsub--More--因为它以破折号开头而被视为一个开关而感到困惑.这可以通过传递--regsub所有开关后轻松修复- 请参见手册页.
  • 您在文件中显示的" - 更多 - "实际上并不是一个实心字符串,并且它中嵌入了某些不可打印的字符.调试此类情况的常用方法是使用HEX-dumper xxd或HEX-editor/viewer 检查文件.

  • 如果可能的话,值得尝试从远程端获取数据,而不是通过像"more"这样的寻呼机来破坏它... (2认同)