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」は削除できますが、「--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マニュアルページを参照してください。

結果として得られるtoの呼び出しregsubは、印刷できないすべての文字を空の文字列に置き換える必要があるため、否定された文字クラス(via ^)を使用します。したがって、適切な呪文は次のようになります。

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

"--More--" "の削除に関して—私には2つの仮説があります。

  • regsub--More--ダッシュで始まるスイッチとして扱うのは混乱しています。これは、すべてのスイッチの後に渡すことで簡単に修正できます—マニュアルページを参照--してくださいregsub
  • ファイルに表示される「--More--」は、実際には実線の文字列ではなく、印刷できない特定の文字が埋め込まれています。このような状況をデバッグするための通常のアプローチは、HEXダンパーのようなファイルxxdまたはHEXエディター/ビューアーを使用してファイルを検査することです。
于 2012-09-29T15:07:10.657 に答える