Command-Line-Interface
有沒有辦法將帶有控製字元的膩子“所有會話輸出”日誌轉換為更易讀的“可列印輸出”日誌?
我們有一個內部承包商來幫助配置產品,我們正在嘗試查看他為我們設置的膩子日誌,但他沒有使用“可列印輸出”,而是使用“所有會話輸出”,其中包括每個擊鍵,包括“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
不要在第一場比賽中停下來。