2011-12-20 2 views
3

Любая идея, как избавиться от этого раздражающего персонажа U + 0092 от кучи текстовых файлов? Я пробовал все ниже, но это не работает. Это называется U + 0092 + управления из символьной картыКак избавиться от этого символа Юникода?

sed -i 's/\xc2\x92//' * 
sed -i 's/\u0092//' * 
sed -i 's///' * 

Ах, я нашел способ:

CHARS=$(python2 -c 'print u"\u0092".encode("utf8")') 
sed 's/['"$CHARS"']//g' 

Но есть прямой СЕПГ метод для этого?

+1

Одиночные кавычки остановят вашу оболочку от разбора любой сдержанной нотации для обратного хода. Я не уверен, что sed сделает это сам, так что, возможно, попробуйте двойные кавычки? –

+0

этот парень сложный. это некие пробелы, это U + 0092, которые появляются в txt, но не отображаются. – alvas

+2

U + 0092 - это никогда не используемый символ управления. Это почти всегда является результатом неправильной кодировки одной правой цитаты '' 'в файле кодовой страницы Windows 1252 как ISO-8859-1. Кодировки очень похожи, но символы, закодированные в байтовом диапазоне 0x80-0x9F, различны. В этом случае вам не следует избавляться от этого или других умных символов кавычек, вы должны просто правильно их прочитать, как ISO-8859-1, или перекодировать файл с 1252 на 8859-1 или UTF-8. – bobince

ответ

3

Пробег: sed "s/\`//g" *. (Я добавил g, чтобы удалить все найденные обратные сигналы).


EDIT: Это не тот ответ, который OP хочет удалить.

После решения в this question, это должно работать:

sed 's/\xc2\x92//g' 

Чтобы продемонстрировать это делает:

[[email protected] ~]$CHARS=$(python -c 'print u"asdf\u0092asdf".encode("utf8")') 
[[email protected] ~]$echo $CHARS 
asdf<funny glyph symbol>asdf 
[[email protected] ~]$echo $CHARS | sed 's/\xc2\x92//g' 
asdfasdf 

Видя, как это то, что вы пробовали уже, возможно, что в текстовом файле не U + 0092?

+0

О, это не обратная сторона. – alvas

+0

Ах, я вижу. В этом случае взгляните на это решение: http://stackoverflow.com/questions/8562354/remove-unicode-characters-from-textfiles-sed-other-bash-shell-methods/8562661#8562661 –

+0

это странно вещь. 'sed 's/\ xc2 \ x92 // g'' не работает, но' CHARS = $ (python -c' print u "\ u0092" .encode ("utf8") ') sed' s/[' «$ CHARS» '] // g'' отлично работает. Поскольку u0092 и \ xc2 \ x92 должны быть одного и того же символа, я не уверен, почему он работает, а другой. – alvas

1

Это может работать для вас (GNU СЭД):

echo "string containing funny character(s)" | sed -n 'l0' 

Это будет отображать строку, как СЭД видит в восьмеричной, а затем использовать:

echo "string containing funny character(s)" | sed 's/\onnn//g' 

Где nnn это восьмеричное значение, удалить его/их.

Смежные вопросы