2012-11-01 43 views
0

(下面是我无法粘贴我看到的字符,BB将表示一个字符是数字0080的正方形,后面跟着一个数字为0094的正方形)。难以用sed代替的字符

我在ISO文件编辑器中看到这个带有âBB而不是的ISO-8859-15编码的字幕文件。

如果我用cat读取文件,破折号会正常显示,但如果我照原样使用该文件,它将在视频字幕上显示—

我试图与SED替代,没有成功:

sed 's/âBB/–/g' thisfile > correctedfile 
sed 's/—/–/g' thisfile > correctedfile 

我第一次尝试它的命令行和编号方框不出现的话,我有一个脚本试了一下。

我甚至试图与

sed 's/â../–/g' thisfile > correctedfile 

作弊,并没有工作。

catsed看到它完美的 - ,所以我想

sed 's/–/–/g' thisfile > correctedfile 

,但它也不能工作。

然后我试着recode iso885915..utf8 thisfile,反之亦然,什么也没有。

如果我在kate中定期查找并替换,它会修复它。但是由于问题出现在我想用命令行中的for; do; done循环解决的其他文件中,但为此我需要知道如何解决其中的一个问题。

为什么这些解决方案不起作用,我错过了什么以及如何使它工作?

+0

请尝试查看sed所见的文件。使用'sed -n l file',然后在替代命令中使用这些值。 – potong

+0

'cat'和'sed'完全看作是 - ,然后我尝试了'sed's/-/-/g'',但它也不起作用。 – Strapakowsky

+0

我不使用sed,但是这是怎么回事:http://www.cyberciti.biz/faq/unix-linux-sed-ascii-control-codes-nonprintable/? –

回答

2

我认为你正在寻找的sed命令是这样的:

sed 's/\xE2\x80\x94/-/g' thisfile 

\ XE2 \ X80 \ X94是16进制我认为是有问题的字符序列。 (仅供参考,它是2014年字符的UTF-8编码,是某种类型的长划线)。这比试图将特殊字符直接放入sed命令更可取。

如果这不起作用,请使用hexdump来准确找出有问题的字节。

hexdump -C thisfile 
+0

我明白了,那就是字符。唉,我跑了'sed',但没有奏效。 hexdump显示为'?200 224',但是当我在创建的文本文件中进行测试时,在这里我输入了一个像这样的短划线,它在hexdump中看起来是一样的。相同的hexdump,但只有ISO-8859-15中的文件在kate或subs中显示时才会出现问题。 – Strapakowsky

+0

hexdump -C不会给你问号。它也不会给你八进制值。你可能使用小写字母c而不是大写字母?另外,你是什么意思,它没有工作?它根本没有修改文件,或者它修改了文件,文件仍然不能正确显示?无论编码如何,sed都可以用任何其他字节替换任何字节。我知道它不适合你,但我不确定你的意思是不工作。 –

+0

我测试过了。根本没有改变文件,这意味着它不符合它。 – Strapakowsky