Command-Line
防止tail修改終端字元集
在 Linux 終端 (CentOS) 中,我使用該命令
tail --follow=name my-rolling-file.log
來查看我的應用程序的日誌。有時在日誌中,會轉儲一些二進制數據(我轉儲了通常包含字元串的 Camel 消息的主體,但有時會轉儲二進制和/或特殊字元,如 UTF-8 中的中文),當它發生時,我的終端會像
|
現在ö
改為管道字元。我只是猜想是二進制數據記錄會導致問題,我想知道是否可以要求
tail
命令忽略特殊字元。我檢查了手冊頁,但在那裡沒有找到任何東西。目前要解決我必須
Ctrl-C
拖尾的問題,reset
在終端中創建一個並重新啟動tail
命令。如果可能,我想阻止這些操作。如果您知道另一個命令
tail
,但具有相同的功能(在滾動文件之後),它是可以接受的,只要它可以在 CentOS 6.5 下安裝和執行。
那這個呢,
tail --follow=name my-rolling-file.log | strings
預設情況下
strings
,它只會輸出長度為 4(或更多)的可列印字元,但您可以使用-n {number}
.
您可以將特殊字元(二進制數據)轉換為可以安全顯示的普通字元,方法是將您的
tail
命令輸入cat -v
:tail --follow=name my-rolling-file.log | cat -v
(也稱為)的
-v
(詳細)選項使用和表示法顯示“非列印”字元:cat``--show-nonprinting``^``M-
- 0x00 顯示為
^@
- 0x01 顯示為
^A
- 0x02 顯示為
^B
- 等等
- 0x7F 顯示為
^?
- 0x80-0xFF 顯示
M-
後跟字節的低七位表示。或者,如果您更喜歡丟棄字元,請使用:
tail --follow=name my-rolling-file.log | tr -cd "\t\n -~"
tr
“翻譯”字元;即,映射它們。例如,它可用於將小寫字母更改為大寫字母。該-d
選項告訴它刪除字元;例如,tr -d aeiou
刪除所有(小寫)元音。-c
選項意味著補充;即,執行除我指定的字元之外的所有字元。"\t\n -~"
是製表符、換行符和所有普通的可列印字元。