我有一些带有隐藏字符的文本文件,可以通过以下命令将其删除:
tr -cd '\11\12\15\40-\176' < initial_file > final_file
如果我可以保留拉丁2个字符,此命令将是完美的。我在tr手册页中找不到有关6位数八进制的信息。如何将具有八进制值的字符(例如\ 305 \ 237或\ 303 \ 256)添加到该tr命令?
我需要保留此列表:
\304\202 Ă
\304\203 ă
\303\216 Î
\303\256 î
\303\202 Â
\303\242 â
\305\236 Ş
\305\237 ş
\305\242 Ţ
\305\243 ţ
我的系统语言环境是en_US.UTF-8。我有几位翻译的字幕,我用ffmpeg脚本将它们刻录到视频上。一切正常,直到一些翻译员交付字幕时出现了一个小问题:在VLC中我看不到它,但是在用ffmpeg刻录后,每行前面都有一个不需要的字符。我无法复制该字符并使用sed将其删除,因为它已在输出视频中被刻录。如果我在该字幕上运行cat -v,我会在每行前面看到M-bM-^@M-^N
。
似乎您具有UTF-8编码的文件,只想保留恰好符合latin2标准的字符。这些字符在latin2中的编码无关紧要。
如果是这种情况,则不能使用tr
。 UTF-8将大多数这些字符编码为两个字节,但是tr
只能替换单个字节。使用sed
代替:
sed 's/[^\r\t -~ĂăÎîÂ⪺Ţţ]//g' infile > outfile
以上命令假定您的终端使用UTF-8(使用命令locale
检查,并且文件也以UTF-8编码。
但是也许您实际上想要...
tr -d '[:cntrl:]' < infile > outfile
或
sed 's/[[:cntrl:]]//g' infile > outfile
...删除所有不可打印的字符。无需手动列出要保留的字符。