3

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

"^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
}

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

我也试过喜欢

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

这也行不通。

提前致谢。

4

1 回答 1

7

我建议:print:在您的正则表达式中使用字符类来匹配所有“合理”字符——请参阅re_syntax手册页

结果调用regsub应该用空字符串替换所有不可打印的字符,所以我们使用否定字符类(via ^),所以正确的咒语应该是这样的:

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

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

  • regsub--More--当它以破折号开头时,将其视为开关感到困惑。这可以通过在所有开关之后传递到来轻松修复---regsub请参阅手册页
  • 您在文件中出现的“--More--”并不是真正的实心字符串,并且其中嵌入了某些不可打印的字符。调试此类情况的常用方法是使用 HEX 转储xxd器或 HEX 编辑器/查看器检查文件。
于 2012-09-29T15:07:10.657 回答