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

Lur*_*rch 13 bash shell

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

^[[38;1;32mHello^[[39m
^[[38;1;31mUser^[[39m
Run Code Online (Sandbox Code Playgroud)

所以我只想留下Hello和User

小智 10

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

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

这些是一些 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
Run Code Online (Sandbox Code Playgroud)

  • `[m,K,H,f,J]` 中的逗号是多余的,对吧? (2认同)

Wii*_*imm 5

我的解决方案:

... | sed $'s/\e\\[[0-9;:]*[a-zA-Z]//g'
Run Code Online (Sandbox Code Playgroud)

冒号用于支持某些旧终端类型的转义。


Mac*_*ers 1

这能解决问题吗?

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

干杯!!

  • 我认为你的意思是 `echo $'\033'"[38;1;32mHello"$'\033'"[39m" | sed -e 's/\^\[\[[0-9;]\{2,\}m//g'` (你写的内容无法成功粘贴),不,它不起作用。 (3认同)