Стандартный шаблон имени файла подстановка , чтобы соответствовать цифра является [0-9]
. Это соответствует одной цифре:
cat file[0-9].txt
Чтобы выбрать только два из них:
cat file[25].txt
Для больших чисел, чем 9, будет полезно расширение фигурных скобок (но см. Примечание ниже для различия между шаблонами сглаживания и расширениями фигурных скобок):
cat file{25..60}.txt
Опять же, расширение скобок учитывает и отдельные номера:
cat file{12,45,900,xyz}.txt
(обратите внимание, что в приведенном выше примере раскрытие фигурной скобки не включает арифметический цикл, а просто генерирует имена на основе предоставленных строк).
В bash
, с extglob
включенным параметром оболочки ( shopt -s extglob
), также будет работать следующее:
cat file@(12|45|490|foo).txt
@(...)
Шаблон будет соответствовать любой один из включенных |
-delimited моделей.
Разница между шаблонами глобализации как [...]
и @(...)
и расширениями в фигурных скобках заключается в том, что в командной строке создается расширение фигурных скобок, которое может не совпадать ни с одним из существующих имен в текущем каталоге. Шаблон подстановки имени файла будет соответствовать именам, но оболочка не будет жаловаться, если не все возможные имена существуют. Если не соответствующее имя не существует, то картина будет оставаться быть нераскрытыми, если также nullglob
опция командного интерпретатора не установлена, то в этом случае шаблон будет удален.
Пример:
touch file1
ls file[0-9]
Здесь file1
будет показан только список файлов для .
С ls file{0..9}
, ls
будет жаловаться не найти file0
, и file2
т.д.
В следующем примере первая команда будет касаться только существующих имен , соответствующих заданному шаблону, а вторая строка создаст файлы, которые еще не существуют:
touch file[0-9]
touch file{0..9}
file45.txt
. Выражение в скобках[...]
работает так же, как и в регулярном выражении, но!
вместо^
слова «не в».[...]
Модель всегда будет соответствовать один символ.{1,2}
тоже не POSIX-совместимый ... узнал несколько новых вещей сегодня!grep
, генерации URL для передачиcurl
и т. Д., Но это также может сбивать с толку людям, которые привыкли работать с шариками.Синтаксис, который нужно использовать,
file{1,2}
будет вычислятьfile1
иfile2
.Как Иниан указал ниже также ... это было бы легче сделать
touch file{1..9}
в этом примере ...Вы также можете использовать несколько выражений, таких как:
Да, выше будет создавать 234 (
9
раз26
) файлов.источник
file{1,2}
синтаксис также удобен для переименования файлов:mv some_very_long_filename.txt{,.bak}
Да, вы можете использовать скобки в
bash
оболочке. Только для пары файлов простоfile{1..2}
или простоfile{1,2}
Или, если вас беспокоит, что в некоторых случаях файлов там нет, просто выполните простой цикл,
Или, если объединение является вашей единственной операцией с файлами, и если вы не уверены, какие файлы не могут присутствовать в любой момент времени, просто
cat
их и подавить ошибки. Перенаправление стандартной ошибки, чтобы/dev/null
подавить ошибки, если файл недоступен.или используйте выражение glob,
file[15]
которое не будет жаловаться на ошибки, если файл не найден.источник
file{1,5}
синтаксис запятых был всем, что я пропустил!