То, как регулярные выражения отличаются от подстановочных знаков, раньше фильтровало файлы

David Schwartz корректен, --partial (или лучше, -P) действительно делает то, что Вы хотите. Я проверил это на 37G файл, который был остановлен ~8g в него по сети. rsync быстро просканировал первые части частичного (показывающий прогресс, когда он шел благодаря -P), и затем возобновленный передача в конец частичного файла.

15
09.01.2013, 10:20
2 ответа

Имя файла Shell globbing и регулярные выражения используют некоторые из тех же символов, и у них есть подобные цели, но Вы правы, они не совместимы. Имя файла globbing является намного менее мощной системой.

В имени файла globbing:

  • * означает "нуль или больше символов"

  • ? означает "любой отдельный символ"

Но в regexes, необходимо использовать .* означать "нуль или больше символов", и . означает "любой отдельный символ". A ? средства что-то очень отличающееся в regexes: нуль или один экземпляр предыдущего элемента РЕ.

Квадратные скобки ([]) кажись, работать то же в обеих системах в системе, я ввожу это на для простых случаев, по крайней мере. Это включает вещи как классы символов POSIX (например. [:alpha:]). Тем не менее, если Вам нужны Ваши команды для работы над многими различными системными типами, я рекомендую против использования чего-либо вне элементарных вещей как списки символов (например. [abeq]) и возможно диапазоны символов (например. [a-c]).

Эти различия означают, что эти две системы являются только непосредственно взаимозаменяемыми для простых случаев. При необходимости в соответствии regex имен файлов необходимо сделать это иначе. find -regex одна опция. (Заметьте, что существует также find -name, между прочим, который использует синтаксис шарика.)

30
27.01.2020, 19:49
  • 1
    я не знаю это, назвали globbing :) –  user3539 08.12.2012, 15:07
  • 2
    , Кроме того, существуют различные ароматы regex. Не все regexes создаются то же! И у Вас есть много других систем сопоставления с образцом, таких как SQL как, где '%' средства '*'. –  Mr Lister 08.12.2012, 15:48
  • 3
    Двумя главными разновидностями regexp является POSIX и PCRE (Perl Совместимый R.E.). Позже менее многоречиво и имеет еще некоторые функции. Инструменты Unix и оболочки обычно используют POSIX, большинство языков программирования со встроенным regexps (кроме оболочки) использует PCRE. Просто остерегайтесь различия при чтении материала онлайн. –  goldilocks 08.12.2012, 17:05

Ответ на вопрос выразил в оригинальном названии:

То, почему регулярные выражения отличаются от этого, раньше фильтровало файлы?

Расширение имени файла предшествует регулярным выражениям, уже существовал с большинством операционных систем (символы подстановочного знака/шутника) и намного более прост и интуитивен, чем последний.

В то время как *.txt легко понятно обычными пользователями, аналогичным .*\.txt что-то более целенаправленное опытным пользователям/программистам, не говоря уже о ^.*\.txt$ ...

11
27.01.2020, 19:49
  • 1
    Другая причина, “почему” часть: скорость. Регулярные выражения медленнее: pastebin.com/3iNCgkE3 –  manatwork 01.01.2013, 13:21
  • 2
    *.txt не равняется .*\.txt, это (главным образом) равняется .*\.txt$ потому что не может быть ничего после .txt (по крайней мере, принятие разумного имени файла globbing). Возможно, ровный ^.*\.txt$ несколько в зависимости от использования. Подтверждает Вашу точку зрения? –  a CVn 09.01.2013, 10:17

Теги

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