Treści mojego reż
$ 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
Chciałbym wymienić szczegóły plików, które zawierają słowo w nazwie pliku, jak określono.
Przykład:
$ ls -lrt *day|night*
ls: *day: No such file or directory
bash: night.txt: command not found
Oczekiwany wynik
-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
Jak wypisać różne pliki pasujące do 2 różnych partternów, lub w skrócie, jak używać wyrażenia regularnego z ls
, aby móc OR
części nazwy pliku.
Oryginalny scenariusz, w katalogu jest wiele plików, skróciłem sprawę o zapytanie.
touch day.txt; touch night.txt; ls {*day,night*}
wynikils: *day: No such file or directory
*{day,night}*
jest bliżej tego, czego chce PO.Nie ma opcji
ls
filtrowania według nazwy pliku, ale w większości powłok istnieje rozszerzenie globbingman bash
/Pattern Matching
ksh
zsh
lub:
grzmotnąć
Możesz to zrobić w dowolnej z tych trzech powłok, ale zwróć uwagę, że jeśli jeden ze przypadków nie pasuje do żadnego pliku, wzorzec pozostanie nierozwinięty (np.
*day* night1.txt othernight.txt
Jeśli nazwa pliku nie zawieraday
; zobaczman bash
/EXPANSION
lub/Brace Expansion
konkretnie):W dowolnej powłoce możesz wykonać:
W zsh, jeśli nie ma pliku
day
lubnight
pliku, ostatnie dwa polecenia zakończą się niepowodzeniem; ustawnonomatch
lubcsh_null_glob
opcji, lub dodać(N)
po każdym wzorze, aby tego uniknąć.źródło
*{day,night}*
. Chciałbym go edytować, ale nie wiem, które powłoki to obsługują?bash
,ksh
izsh
(żadna nie wymaga rozszerzonego globowania), ale niesh
- jednak ostatni przykład Nahuela dotyczący „wszystkich powłok” działash
.Powłoki nie używają wyrażeń regularnych do interpretacji argumentów.
Możesz włączyć rozszerzone dopasowanie wzorca przez
i wtedy
Zobacz na przykład Podręcznik odniesienia Bash (dopasowywanie wzorca)
źródło