我正在编写一个脚本来读取文件并替换一些包含无法识别的字符的字符,例如
"^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
这也行不通。
提前致谢。
答案 0 :(得分:5)
我建议您在正则表达式中使用:print:
字符类来匹配所有“明智”字符 - 请参阅re_syntax
manual page。
对regsub
的调用应该用空字符串替换所有不可打印的字符,因此我们使用一个否定的字符类(通过^
),因此正确的咒语将如下所示:< / p>
set lineInfo [regsub -all {[^[:print:]]} $lineInfo ""]
至于删除“--More--”“ - 我有两个假设:
regsub
混淆将--More--
视为一个开关,因为它以短划线开头。通过在所有切换后将--
传递给regsub
,可以轻松解决此问题 - 请参阅manual page。xxd
或HEX-editor / viewer)检查文件。