Удалите «необычные» символы Юникода
В комментариях вы упоминаете, что хотите заблокировать управляющие символы, сохранив при этом греческие символы, поэтому приведенное ниже решение с tr не подходит. Одним из решений является sed
, который предлагает поддержку Unicode, а их класс [[:alpha:]]
также соответствует алфавитным символам за пределами ascii. Сначала вам нужно установить LC_CTYPE
, чтобы указать, какие символы попадают в диапазон [[:alpha:]]
. Для немецкого языка с умляутами это, например.
LC_CTYPE=de_DE.UTF-8
Затем вы можете использовать sed
, чтобы удалить все, что не является буквой или знаком препинания:
sed 's/[^[:alpha:];\ -@]//g' < junk.txt
Что делает \ -@
: он сопоставляет все символы в диапазоне ascii между пробелом и @
(см. таблицу ascii). a [[:punct:]]
, но, к сожалению, он также соответствует большому количеству мусора, поэтому необходим \ -@
.
Возможно, вам придется немного поиграть с 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
. Числа там восьмеричные. Посмотрите, например. эту таблицу ascii. \11
это tab
, \12
это возврат каретки. \40-\176
— это все символы, которые обычно считаются «нормальными».
person
hansaplast
schedule
17.01.2017