В Linux у меня есть каталог с большим количеством файлов. Некоторые из них имеют символы не ASCII, но все они действительны в формате UTF-8 . В одной программе есть ошибка, которая не позволяет ей работать с именами, отличными от ASCII, и я должен выяснить, сколько из них затронуто. Я собирался сделать это с find
и затем сделать grep, чтобы напечатать символы не ASCII, и затем сделать a, wc -l
чтобы найти число. Это не должно быть grep; Я могу использовать любое стандартное регулярное выражение Unix , например Perl , sed , AWK и т. Д.
Однако существует ли регулярное выражение для «любого символа, который не является символом ASCII»?
/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x9F]
Ответы:
Это будет соответствовать одному не-ASCII символу:
Это действительное PCRE ( Perl-совместимое регулярное выражение ).
Вы также можете использовать сокращения POSIX :
[[:ascii:]]
- соответствует одному символу ASCII[^[:ascii:]]
- соответствует одному не-ASCII-символу[^[:print:]]
вероятно, будет достаточно для вас. **источник
^
действует в PCRE.:print:
не работает в терминале UTF8? Это работает для меня в pry в терминале UTF8:27.chr =~ /[^[:print:]]/
rename 's/[^\x00-\x7F]//g' *
(вы можете-n
сначала проверить, что переименования в порядке).Нет,
[^\x20-\x7E]
это не ASCII.Это настоящий ASCII:
В противном случае он обрежет символы новой строки и другие специальные символы, которые являются частью таблицы ASCII!
источник
Вы также можете проверить эту страницу: Регулярные выражения Unicode , так как она содержит некоторые полезные классы символов Unicode, такие как:
источник
[^\x00-\x7F]
и[^[:ascii:]]
пропустить некоторые управляющие байты, так что иногда строки могут быть лучшим вариантом. Напримерcat test.torrent | perl -pe 's/[^[:ascii:]]+/\n/g'
будет делать странные вещи с вашим терминалом, где так жеstrings test.torrent
будет себя вести.источник
Подтвердить текстовое поле Принять Ascii Используйте только этот шаблон
[\x00-\x7F]+
источник
Я использую,
[^\t\r\n\x20-\x7E]+
и это, кажется, работает нормально.источник
Вы можете использовать это регулярное выражение:
Дело спрашивают, варианты Multiline .
источник
Вам не нужно регулярное выражение.
Это также покажет имена файлов с управляющими символами в их именах, но я считаю, что это особенность.
Если у вас нет подходящих файлов, глобус расширится до самого себя, если вы не
nullglob
установили. (Выражение не соответствует самому себе, так что технически этот вывод однозначен.)источник
Это оказалось очень гибким и расширяемым. $ field = ~ s / [^ \ x00- \ x7F] // g; # Таким образом, все не ASCII или конкретные рассматриваемые элементы могут быть очищены. Очень хорош в выборе или предварительной обработке элементов, которые в конечном итоге станут хеш-ключами.
источник