(grep) регулярное выражение для сопоставления символов, отличных от ASCII?
на Linux, у меня есть каталог с большим количеством файлов. Некоторые из них имеют символы, отличные от ASCII, но все они действительны UTF-8. Одна программа имеет ошибку, которая мешает ей работать с именами файлов, отличными от ASCII, и мне нужно выяснить, сколько из них затронуты. Я собирался сделать это с find и чтобы напечатать символы, отличные от ASCII, а затем сделать wc -l найти количество. Это не обязательно должен быть grep; я могу использовать любой стандартный Unix регулярные выражение, как Perl,sed,AWK и т. д.
однако существует ли регулярное выражение для "любого символа, который не является символом ASCII"?
8 ответов:
это будет соответствовать одному символу, отличному от ASCII:
[^\x00-\x7F]это правильный PCRE (Perl-Совместимое Регулярное Выражение).
вы также можете использовать POSIX shorthands:
[[:ascii:]]- соответствует одному символу ASCII[^[:ascii:]]- соответствует одному символу, отличному от ASCII
[^[:print:]]будет вполне достаточно для вас.**
нет,
[^\x20-\x7E]не является ASCII.Это настоящий ASCII:
[^\x00-\x7F]в противном случае, он будет вырезать строки и другие специальные символы, которые являются частью таблицы ASCII!
вы также можете проверить эту страницу: Регулярных Выражений В Unicode, так как он содержит некоторые полезные классы символов Unicode, типа:
\p{Control}: an ASCII 0x00..0x1F or Latin-1 0x80..0x9F control character.
вам действительно не нужно регулярное выражение.
printf "%s\n" *[!\ -~]*Это также покажет имена файлов с управляющими символами в их именах, но я считаю, что это функция.
Если у вас нет соответствующих файлов, Глобус будет расширяться до нуля.
[^\x00-\x7F]и[^[:ascii:]]пропустить некоторые управляющие байты так строки может быть лучшим вариантом иногда. Напримерcat test.torrent | perl -pe 's/[^[:ascii:]]+/\n/g'будет делать странные вещи для вашего терминала, где какstrings test.torrentбудет вести себя.
Это оказалось очень гибким и расширяемым. $field =~ s/[^\x00-\x7F]/ / g ; # таким образом, все не ASCII или конкретные элементы, о которых идет речь, могут быть очищены. Очень приятно либо в выборе, либо в предварительной обработке элементов, которые в конечном итоге станут хэш-ключами.
Comments