入力する:
[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]$
答え1
CSI...シーケンスを削除しようとしていますm。で区切られた一連の数字が含まれていることがわかっている場合は、;
sedを使用して各項目を空の文字列に置き換えることができます。
esc=$'\e'
sed "s/$esc\[[0-9;]*m//g" a.txt
私は上記のエスケープ文字を書くためにBash構文を使用しています。
答え2
@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
。