如何删除 ^

如何删除 ^

输入:

[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或类似...

相关内容