Газа «необычный» Юникод
В комментариях вы упоминаете, что вы хотите, чтобы блокировать управляющие символами, сохраняя при этом греческие символы, так что решение ниже с тр не подходит. Одним из решений является sed
, который предлагает поддержку юникода, а их классы [[:alpha:]]
соответствуют также алфавитным символам за пределами ascii. Сначала вам нужно установить LC_CTYPE
, чтобы указать, какие персонажи попадают в диапазон [[:alpha:]]
. Для немецкого языка с Umlauts это, например,
LC_CTYPE=de_DE.UTF-8
Затем вы можете использовать sed
вырезать все, что не является буквой или пунктуации:
sed 's/[^[:alpha:];\ [email protected]]//g' < junk.txt
Что \ [email protected]
делает: Он соответствует всем символам в диапазоне ASCii между пространством и @
(см ascii table Sed имеет класс [[:punct:]]
, но, к сожалению, это также соответствует большому количеству мусора, поэтому требуется \ [email protected]
.
Возможно, вам придется немного поиграть с LC_CTYPE
, установив его на utf-8
только я мог соответствовать греческим персонажам, но не японским.
Если вы заботитесь только о ASCII
Если вы только заботиться о регулярных символов ASCII вы можете использовать tr
: сначала преобразовать файл в «один байт на символ» кодировке, так как tr
не понимает многобайтные символы, например используя iconv
.
Затем я бы посоветовал использовать белый список (в отличие от подхода черного списка, который у вас есть в вашем вопросе), поскольку гораздо проще указать, что вы хотите сохранить, чем то, что вы хотите отфильтровать.
Эта команда должна сделать:
iconv -c -f utf-8 -t latin1 < junk.txt | tr -cd '\11\12\40-\176'
эта линия ..
- преобразуется в latin1 (один байт на голец) и игнорирует все символы выше элемент коды 127 (которые являются специальными символами, но быть в курсе, что отсекает также такие вещи, как Умляут или специальных символы в вашем языке, которые вы могли бы хотеть держать!)
- удаляет все символы, находящиеся за пределами этого белого списка:
\11\12\40-\176
. Числа там восьмеричные. Посмотрите, например. this ascii table. \11
есть tab
, \12
есть возвращение денег. \40-\176
- все символы, которые обычно считаются «нормальными»
Dos2Unix также не работает. проблемы с ошибками в преобразовании файла ' – user2975559
в какой кодировке является файл? Можете ли вы вставить файл на pastebin.com? – hansaplast
кодировка файла - utf-8. Извините, я не мог поместить файл. – user2975559