我有一个包含特殊字符的文件,这些字符是在从终端复制时创建的。
现在我想删除它们。我试过 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 包并安装它。