使用bash从文本文件中删除ANSI颜色代码

时间:2013-10-10 13:10:00

标签: bash shell

我有一个运行并输出到文本文件的bash脚本,但它使用的颜色代码也包括我想知道的是如何从文件中删除它们,即

^[[38;1;32mHello^[[39m
^[[38;1;31mUser^[[39m

所以我只想留下Hello和User

3 个答案:

答案 0 :(得分:3)

sed -r "s/\x1B\[(([0-9]{1,2})?(;)?([0-9]{1,2})?)?[m,K,H,f,J]//g" file_name

此命令从文件中删除特殊字符和颜色代码

这些是一些ANSI代码:     ESC[#;#H or ESC[#;#f将光标移动到#行#列     ESC[2J清除屏幕和主页光标     ESC[K清除到行尾,

请注意,如果代码清晰,则既没有数字也没有分号;

同意以下评论: 如果数字超过2位,请使用:

sed -r "s/\x1B\[(([0-9]+)(;[0-9]+)*)?[m,K,H,f,J]//g" filename

答案 1 :(得分:1)

这是否解决了这个问题?

$ echo "^[[38;1;32mHello^[[39m" | sed -e 's/\^\[\[[0-9;]\{2,\}m//g'
Hello

欢呼声!!

答案 2 :(得分:1)

我的解决方案:

... | sed $'s/\e\\[[0-9;:]*[a-zA-Z]//g'

冒号可以支持某些旧终端类型的转义符。