Command-Line-Interface

有沒有辦法將帶有控製字元的膩子“所有會話輸出”日誌轉換為更易讀的“可列印輸出”日誌?

  • February 27, 2013

我們有一個內部承包商來幫助配置產品,我們正在嘗試查看他為我們設置的膩子日誌,但他沒有使用“可列印輸出”,而是使用“所有會話輸出”,其中包括每個擊鍵,包括“BS”等,使得日誌非常難以閱讀,因為他有很多很多錯別字。IE:

$$ ESC $$]0;root@host:~$$ BEL $$$$ root@host ~ $$# 它,厘米$$ BS $$$$ BS $$$$ ESC $$$$ K[BS $$$$ ESC $$$$ Kcmd agent starp[BS $$噸 是否有某種方法可以智能地去除這些控製字元,以便最終結果是一個人類可讀的文件,就像您在“可列印輸出”格式中看到的一樣?

感謝您的以下建議。我們的主要痛點是

$$ BS $$控製字元,這將變成: ls -pg

$$ BS $$$$ BS $$人$$ BS $$| 難的$$ BS $$博士 進入:

ls -al | grep 博士

知道如何實現嗎?

在 putty、cat日誌文件中啟用非常大的回滾,並將結果複製並粘貼到新文件中。

雖然並不完美,但這個 sed 過濾器將為您提供一個起點。

sed -r 's/(\[[A-Z]+\]?|\]0;)//g' escapes.log > noescapes.log

如果我通過該過濾器管道您的樣品,我得到:

root@host:~[root@host ~]# itm,cmcmd agent starpt

依賴命令/腳本來解析實際終端程式碼的解決方案會更優雅,這更像是一種“快速修復”。

那些試圖學習它們的人的正則表達式分解:

  • 用於交替目的的外括號(|字元為 OR)
  • \[並且\]是轉義的方括號,因此它們不會被解釋為字元類。
  • [ ]包含一個字元類。[A-Z]是一個匹配任何大寫字母的類。
  • +表示匹配“一個或多個前一個原子”。前一個原子是字元類,因此是“一個或多個大寫字母”。
  • ?表示前一個原子是可選的。在這種情況下,可選原子是\].
  • 此時的組合含義:“出現一個或多個大寫字元,前面有一個文字$$ , optionally suffixed by a literal $$"
  • |字元是 OR 的開始。
  • \]0;匹配以 0 為後綴的 ‘a literal ];`。

替換字元串為空,因此它們被刪除。/g告訴sed不要在第一場比賽中停下來。

引用自:https://serverfault.com/questions/483101