Ответы:
Глобализация имени файла оболочки и регулярные выражения используют одни и те же символы, и они имеют схожие цели, но вы правы, они не совместимы. Глобализация имени файла - гораздо менее мощная система.
В подстановке имени файла:
*
означает «ноль или более символов»
?
означает «любой отдельный символ»
Но в регулярных выражениях вы должны использовать .*
для обозначения «ноль или более символов» и .
означает «любой отдельный символ». A ?
означает нечто совершенно иное в регулярных выражениях: ноль или один экземпляр предыдущего элемента RE.
Квадратные скобки ( []
), кажется, работают одинаково в обеих системах в системе, на которой я это печатаю, по крайней мере, для простых случаев. Это включает в себя такие вещи, как классы символов POSIX (например [:alpha:]
). Тем не менее, если вам нужно, чтобы ваши команды работали на многих различных типах систем, я рекомендую не использовать ничего, кроме элементарных вещей, таких как списки символов (например [abeq]
) и, возможно, диапазоны символов (например [a-c]
).
Эти различия означают, что две системы взаимозаменяемы только для простых случаев. Если вам нужно сопоставить имена файлов с помощью регулярных выражений, вам нужно сделать это по-другому. find -regex
это один из вариантов. (Обратите внимание, что find -name
, кстати, также используется синтаксис glob.)
'%'
означает '*'
.
Отвечая на вопрос, выраженный в оригинальном заголовке:
Почему регулярные выражения отличаются от используемых для фильтрации файлов?
Расширение имени файла предшествует регулярным выражениям, уже существующим в большинстве операционных систем (подстановочные знаки / символы джокера), и намного проще и интуитивнее, чем последние.
Хотя *.txt
это легко понять обычным пользователям, аналогия .*\.txt
более ориентирована на опытных пользователей / программистов, не говоря уже о ^.*\.txt$
...
*.txt
не равно .*\.txt
, оно (в основном) равно, .*\.txt$
потому что после ничего не может быть .txt
(по крайней мере, при условии разумного искажения имени файла). Возможно даже ^.*\.txt$
несколько в зависимости от использования. Доказывает вашу точку зрения?