Special-Characters
如何在保留換行符的同時刪除 ^[[1m ^[[22m ^[[4m ^[[24m 個字元?
輸入:
[user@notebook test]$ cat a.txt music musicsheet sheetmusic [user@notebook test]$ cat a.txt | cat -vte - $ ^[[1mmusic^[[22m$ ^[[1mmusicsheet^[[22m$ ^[[1msheetmusic^[[22m$ ^[[4m^[[24m$ [user@notebook test]$
需要輸出(刪除這些有趣的字元後):
[user@notebook test]$ cat a.txt music musicsheet sheetmusic [user@notebook test]$ cat a.txt | cat -vte - music$ musicsheet$ sheetmusic$ [user@notebook test]$
問題:如何刪除有趣/未知的字元:
^[[1m ^[[22m ^[[4m ^[[24m
這些字元是什麼?還有更多類似的嗎?
嘗試使用 tr 刪除不可列印的字元只會使這些有趣的字元可見並刪除換行符,這都是不好的:
[user@notebook test]$ cat a.txt | tr -cd '[:print:]' [1mmusic[22m[1mmusicsheet[22m[1msheetmusic[22m[4m[24m[user@notebook test]$
@Toby Speight 的解決方案很好。一些額外的資訊:
通常這些是用於在終端中產生顏色、特殊效果、定位游標等的 ansi“特殊字元”。
例如
grep --color=always '[a-z]*music[a-z]*' files > output
會產生這樣的字元。sed -r "s/\x1B\[[0-9;]*[a-zA-Z]//g"
建議:檢查您是否將
GREP_COLOR
不推薦使用的變數設置為--color=always
或類似…
您想刪除
CSI
…m
序列。知道它們包含由 分隔的數字序列;
,您可以使用 sed 將每個出現的地方替換為空字元串:esc=$'\e' sed "s/$esc\[[0-9;]*m//g" a.txt
我正在使用 Bash 語法來編寫上面的轉義字元。