Использование шаблонов OR в шаблонах оболочки

Содержание моего каталога

$ ls -lrt total 0 -rw-r--r-- 1 user1 admin 19 Oct 8 12:31 night.txt -rw-r--r-- 1 user1 admin 19 Oct 8 12:31 noon.txt -rw-r--r-- 1 user1 admin 38 Oct 8 12:31 day.txt 

Я хотел бы перечислить детали файлов, в которых есть слово в имени файла, как указано.

Пример :

 $ ls -lrt *day|night* ls: *day: No such file or directory bash: night.txt: command not found 

Ожидаемый результат

 -rw-r--r-- 1 user1 admin 19 Oct 8 12:31 night.txt -rw-r--r-- 1 user1 admin 38 Oct 8 12:31 day.txt 

Как перечислить разные файлы, соответствующие 2 различным разделам, или, вкратце, как использовать регулярное выражение с ls , чтобы я мог OR части файла.

Оригинальный сценарий, есть много файлов в каталоге, сократили дело для запроса.

3 Solutions collect form web for “Использование шаблонов OR в шаблонах оболочки”

Вам даже не требуется расширенное функционирование, позволяющее делать то, что вы хотите. Это будет работать в bash:

 ls {day*,night*} 

В ls нет опции для фильтрации по имени файла, но в большинстве оболочек имеется расширение расширения manh man bash /Pattern Matching

КШ

 ls -lrtd -- *@(day|night)* 

ЗШ

 setopt extendedglob ls -lrtd -- *(day|night)* 

или:

 setopt kshglob ls -lrtd -- *@(day|night)* 

удар

 shopt -s extglob ls -lrtd -- *@(day|night)* 

В любой из этих трех оболочек вы можете это сделать, но обратите внимание, что если один из случаев не соответствует ни одному файлу, этот шаблон останется нерасширенным (например, *day* night1.txt othernight.txt если нет имени файла, содержащего day , см. man bash /EXPANSION или /Brace Expansion ):

 ls -lrtd -- *{day,night}* 

В любых оболочках вы можете делать:

 ls -lrtd -- *day* *night* 

В zsh, если нет ни day ни night файла, последние две команды будут терпеть неудачу; установите параметр nonomatch или csh_null_glob или добавьте (N) после каждого шаблона, чтобы избежать этого.

Оболочки не используют регулярные выражения для расширения аргументов.

Вы можете включить расширенное сопоставление шаблонов на

 $ shopt -s extglob 

а потом

 $ ls @(day|night).txt day.txt night.txt 

См., Например, справочное руководство Bash (сопоставление образцов)

  • Скрытие завершения zsh
  • zsh - сложное имя файла, соответствующее
  • Почему cd добавляет dirs, например pushd?
  • zsh сбой в моей Linux-среде, поиск подсказок отладки
  • Почему «xargs bash -ic echo» не то же самое, что «xargs echo» или «xargs»?
  • Новые привязки клавиш в ZSH не сохраняются
  • Запись zsh и вывод на другую команду
  • bash выбрасывает «set-ena», когда я нажимаю / пишу b в терминале
  • zsh копировать и вставлять как emacs
  • Что делает строка `set - $ args` и почему она ведет себя по-разному между Zsh и Bash?
  • Передача имен файлов в zmv
  • Interesting Posts
    Linux и Unix - лучшая ОС в мире.