(grep) регулярное выражение для сопоставления символов, отличных от ASCII?



на Linux, у меня есть каталог с большим количеством файлов. Некоторые из них имеют символы, отличные от ASCII, но все они действительны UTF-8. Одна программа имеет ошибку, которая мешает ей работать с именами файлов, отличными от ASCII, и мне нужно выяснить, сколько из них затронуты. Я собирался сделать это с find и чтобы напечатать символы, отличные от ASCII, а затем сделать wc -l найти количество. Это не обязательно должен быть grep; я могу использовать любой стандартный Unix регулярные выражение, как Perl,sed,AWK и т. д.



однако существует ли регулярное выражение для "любого символа, который не является символом ASCII"?

611   8  

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 будет вести себя.

вы можете использовать это регулярное выражение:

[^\w \xC0-\xFF]

Case ask, параметры Multiline.

Это оказалось очень гибким и расширяемым. $field =~ s/[^\x00-\x7F]/ / g ; # таким образом, все не ASCII или конкретные элементы, о которых идет речь, могут быть очищены. Очень приятно либо в выборе, либо в предварительной обработке элементов, которые в конечном итоге станут хэш-ключами.

для проверки текстового поля Accept Ascii используйте только этот шаблон

[\x00-\x7F]+

Comments

    Ничего не найдено.