Intereting Posts
Почему Fedora 20 запрашивает перезапуск после обновлений программного обеспечения? Почему gstreamer-ffmpeg изменяет шрифты для java-приложений? Запустите параллельную команду, ожидая ssh Как вы выводите информационную страницу в pdf? Социальный сайт о командах оболочки Byobu – Новое окно с той же сессией ssh? Как обеспечить, чтобы скрипт успешно выполнялся как транзакция Советы по использованию Linux без раздела подкачки «Печатать» текстовый файл на изображения с макетом из командной строки Перемещение с bash на zsh: сброс PATH Как отличить, работает ли система systemd с помощью apt-get или во время загрузки? как скопировать мою Linux-систему на другой ноутбук Как приложения GUI будут работать, если нет системного трея? как проверить, будет ли (вручную) обновление программного обеспечения нарушать существующее программное обеспечение? Температура процессора процессора намного выше, чем на Debian

Использование шаблонов 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 части файла.

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

Вам даже не требуется расширенное функционирование, позволяющее делать то, что вы хотите. Это будет работать в 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 (сопоставление образцов)