Содержимое моего каталога
$ 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
Как перечислить разные файлы, соответствующие двум разным партнерам, или вкратце, как использовать регулярные выражения ls
, чтобы я мог OR
использовать части имени файла.
Оригинальный сценарий, есть много файлов в каталоге, сократили случай для запроса.
touch day.txt; touch night.txt; ls {*day,night*}
результатыls: *day: No such file or directory
*{day,night}*
, ближе к тому, что хочет ОП.Там нет опции
ls
для фильтрации по имени файла, но в большинстве оболочек есть расширение globbingman bash
/Pattern Matching
КШ
ЗШ
или же:
удар
В любой из этих трех оболочек вы можете сделать это, но учтите, что если один из случаев не соответствует ни одному файлу, этот шаблон останется нерасширенным (например,
*day* night1.txt othernight.txt
если имя файла не содержитday
; см.man bash
/EXPANSION
Или/Brace Expansion
конкретно):В любой оболочке вы можете сделать:
В zsh, если нет
day
илиnight
файла, последние две команды потерпят неудачу; установите параметрnonomatch
илиcsh_null_glob
, или добавьте(N)
после каждого шаблона, чтобы избежать этого.источник
*{day,night}*
. Я бы отредактировал это, но я не знаю, какие оболочки поддерживают это?bash
,ksh
иzsh
(ни один не нуждается в расширенной глобализации), но нетsh
- однако последний пример Науэля "все оболочки" работает вsh
.Оболочки не используют регулярные выражения для расширения аргумента.
Вы можете включить расширенное сопоставление с образцом
а потом
Смотрите, например, Справочное руководство Bash (Pattern Matching)
источник