Можно ли добавить текст в начало файла в CLI, не создавая новый файл ?

Поиск символов, отличных от ASCII, прост: установите языковой стандарт, в котором допустимы только символы ASCII, выполните поиск недопустимых символов.

LC_CTYPE=C grep '[^[:print:]]' myfile

Если вы хотите найти японские иероглифы, это немного сложнее. С помощью grep вам необходимо убедиться, что ваш языковой стандарт LC_CTYPE соответствует кодировке файлов. Вам также необходимо убедиться, что для параметра LC_COLLATE задан японский язык, если вы хотите использовать выражение диапазона символов. Например, в Linux (я определил первый и последний символ, который считается японским, просмотрев раздел LC_COLLATE / usr / share / i18n / locales / ja_JP ):

LC_CTYPE=ja_JP.UTF-8 LC_COLLATE=ja_JP.UTF-8 egrep '[。-龥]' myfile

или если вы хотите придерживаться ASCII в своем скрипте

LC_CTYPE=ja_JP.UTF-8 LC_COLLATE=ja_JP.UTF-8 egrep $'[\uff61-\u9fa5]' myfile

Сюда входят несколько знаков препинания, которые также используются в английском языке, например и × .

Perl имеет встроенные функции для классификации символов. Вы можете использовать класс символов \ p для сопоставления символов на основе свойств Unicode . Передайте ключ командной строки -CSD , чтобы сообщить Perl, что все находится в Unicode с кодировкой UTF-8.

perl -CSD -ne 'print if /\p{Hiragana}|\p{Katakana}/' myfile

Если ваши файлы не закодированы в UTF-8, вам придется явно вызвать binmode , чтобы сообщить Perl об их кодировке. Для меня это слишком сложное использование perllocale .В качестве альтернативы вы можете сначала перекодировать строку в UTF-8 .

В качестве альтернативы в Perl вы можете использовать диапазоны числовых символов. Например, для поиска символов в блоках Unicode хирагана и катакана:

perl -CSD -ne 'print if /[\x{3040}-\x{30ff}]/' a

1
03.01.2018, 04:20
0 ответов

Теги

Похожие вопросы