如何从文本文件中删除这些特殊字符

如何从文本文件中删除这些特殊字符

我有一个包含特殊字符的文件,这些字符是在从终端复制时创建的。

现在我想删除它们。我试过 grep 和 sed,但没有用,也许我做错了。

特殊字符是黑框内的 ESC,无法复制它,但如果我复制它,它会变成一个里面有数字的框:

框内的数字是:

00

1B

答案1

Python 可以完成这项工作。这里的过程很简单,我们将所有行读入列表,同时替换 UTF 转义字符(即\u001b),然后再次打印出行,但没有转义字符。将< input.txt旧文本发送到 python 命令,并将> new_file.txt文本发送到新文件。

脚本:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
lines=[l.strip().replace(u"\u001b","") for l in sys.stdin]
print("\n".join(lines))

将其另存为delete_escape.py,使用使其可执行chmod +x ./delete_escape.py,然后像这样调用它:

./delete_escape.py < input.txt > output.txt

结果:

在此处输入图片描述

答案2

你可以在sed,但您需要使用ANSI 转义在 bash 中赋予它字符:

sed -i 's/'$'\u001b''//g' file

实际运行如下:

截图显示角色被删除

或者,在 perl 中:

perl -i -pe 's/'$'\u001b''//g' file

tr

tr -d $'\u001b' < file > newfile 

答案3

如果我理解正确的话,您似乎想要删除文本中存在的 ansi 转义序列。请尝试

ansifilter file

更新

令我惊讶的是,没有ansifilter适用于 ubuntu 的软件包!(有适用于 fedora、arch、brew 等的软件包)

尽管如此,我们可以安装特吉特或者来自其他包,或者获得rpm,应用外星人构建一个 deb 包并安装它。

相关内容