2012-11-01 42 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