我有一个Bash脚本,它可以运行并输出到文本文件,但其中包含的颜色代码也会被输出,我想知道如何从该文件中删除这些代码。
^[[38;1;32mHello^[[39m
^[[38;1;31mUser^[[39m
所以我只想保留“Hello”和“User”
我有一个Bash脚本,它可以运行并输出到文本文件,但其中包含的颜色代码也会被输出,我想知道如何从该文件中删除这些代码。
^[[38;1;32mHello^[[39m
^[[38;1;31mUser^[[39m
所以我只想保留“Hello”和“User”
sed -r "s/\x1B\[(([0-9]{1,2})?(;)?([0-9]{1,2})?)?[m,K,H,f,J]//g" file_name
这个命令可以去除文件中的特殊字符和颜色代码。
这些是一些 ANSI 代码:
ESC[#;#H 或 ESC[#;#f
可以将光标移动到第 # 行、第 # 列
ESC[2J
可以清空屏幕并将光标放回原点
ESC[K
可以清除至行尾。
注意,在清空代码中,既没有数字也没有分号 ;
同意以下评论: 如果数字超过两位数,请使用此代码:
sed -r "s/\x1B\[(([0-9]+)(;[0-9]+)*)?[m,K,H,f,J]//g" filename
[m,K,H,f,J]
中的逗号是多余的,对吗? - Tuetschek我的解决方案:
... | sed $'s/\e\\[[0-9;:]*[a-zA-Z]//g'
这解决了问题吗?
$ echo "^[[38;1;32mHello^[[39m" | sed -e 's/\^\[\[[0-9;]\{2,\}m//g'
Hello
加油!!
TERM=xterm tput setf 1|sed -e 's/\^\[\[[0-9;]\{2,\}m//g'|hexdump -C
- Armaliecho $'\033'"[38;1;32mHello"$'\033'"[39m" | sed -e 's/\^\[\[[0-9;]\{2,\}m//g'
(你写的无法成功粘贴),但它并不起作用。 - Jasen大多数投票的答案对我来说并没有立即生效。它需要进行一些小的调整。
操作步骤:
- 在bash shell中运行以下命令,或将以下代码块添加到您现有的别名列表中,以便将来可以重用
decolor
别名。
## Decolor ANSI Colored Output
# example: (see preview in VSCode editor)
# >>> cat <filepath> | decolor | code -
alias decolor.styles='sed -E "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})*)?[m,K,H,f,J]//gm"'
alias decolor.reset='sed -E "s/\x1B\([A-Z]{1}(\x1B\[[m,K,H,f,J])?//gm"'
alias decolor='decolor.styles | decolor.reset'
使用方法:
cat coloredtext.txt | decolor
输出:
PRESENT: /somepath/somefile_a.csv
PRESENT: /somepath/somefile_b.csv
# File Name: coloredtext.txt
# [1m[32mPRESENT:(B[m [32m/somepath/somefile_a.csv(B[m
# [1m[32mPRESENT:(B[m [32m/somepath/somefile_b.csv(B[m
\x1B[1m\x1B[32mPRESENT:\x1B(B\x1B[m \x1B[32m/somepath/somefile_a.csv\x1B(B\x1B[m
\x1B[1m\x1B[32mPRESENT:\x1B(B\x1B[m \x1B[32m/somepath/somefile_b.csv\x1B(B\x1B[m