Відповіді:
Регулярні вирази та глобальні імена файлів - це дві дуже різні речі.
Регулярні вирази використовуються в командах / функціях для відповідності шаблону в тексті. Наприклад, у параметрі шаблону grep
або в мовах програмування.
Оболонка імен файлів використовується оболонками для узгодження імен файлів та каталогів за допомогою макетів. Можливості глобулінгу залежать від оболонки. Наприклад, Bash підтримує символи, такі як:
*
відповідати 0 або більше символів?
відповідає 1 символу[...]
відповідати символу у вказаному наборіЦі підстановки можуть виглядати подібними до регулярних виразів, і справді [...]
мають однакове значення у глобулінгу та регулярному вираженні. Але *
і ?
означають різні речі в універсалізації та регулярний вираз.
У коментарі ви написали:
але як різниця перекладача * чи то джокер чи регекс? наприклад:
grep a*b a*.txt
?
Легко. Типу.
Перш за все, оболонка намагається інтерпретувати підстановку, порівнюючи їх з іменами. Якщо є файли, що починаються з "а" і закінчуються на "b", оболонка замінить a*b
відповідні імена файлів. Те саме стосується a*.txt
. Якщо не буде збігаються назви файлів, оболонка передасть аргументи grep
буквально такими, якими вони були.
Однак першим параметром grep
має бути шаблон. У 99,999% випадків практичного використання ви не хочете, щоб перший параметр був інтерпретований оболонкою. Тож, мабуть, наміром було таке:
grep "a*b" a*.txt
Завдяки цитуванню a*b
оболонка не буде інтерпретувати її за допомогою глобулінгу, а натомість передасть її безпосередньо grep
. У свою чергу, grep
трактуватиме це як регулярний вираз (за конструкцією).
Підсумовуючи це, оболонка інтерпретує командний рядок, дотримуючись власної мови глобалізації, яка використовує підстановку. Команди, програми інтерпретують їх параметри так, як вони були розроблені їхніми авторами.
Якщо ім'я файлу є рядком для вас, ви можете використовувати регулярний вираз також для імен файлів. Наприклад: якщо ви хочете знайти імена файлів, які відповідають регексу, ви можете спробувати:
find ./ -regex '.*[abc][xyz].*'
Команда шукає файли, які мають ім’я a, b або c, а потім x, y або z. Це лише один приклад. Є нескінченні можливості.
find ./ -name 'a*'
ви використовуєте * як підстановку. Під час введення find ./ -regex 'a*'
ви використовуєте * у регулярному виразі. Важлива відмінність - перемикач -name
або -regex
.