Utilizzo dei pattern OR nei caratteri jolly shell


52

I contenuti del mio dir sono

$ 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

Vorrei elencare i dettagli dei file che hanno una parola nel nome file come specificato.

Esempio :

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

Uscita prevista

-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

Come elencare file diversi corrispondenti a 2 parttern diversi, o in breve come usare regex con ls, in modo che io potessi ORparti del nome file.

Scenarion originale, ci sono molti file nella directory, hanno abbreviato il caso di chiedere.

Risposte:


65

Non è nemmeno necessario abilitare il globbing esteso per fare ciò che si desidera. Questo funzionerà in bash:

ls {day*,night*}

7
No non lo fa: touch day.txt; touch night.txt; ls {*day,night*}risulta inls: *day: No such file or directory
Matteo

1
Stavo adattando il testo del poster originale; Ho pensato che fosse chiaro. sospiro . Testo aggiornato. Sicuramente puoi vedere che il meccanismo funziona?
itsbruce

7
O forse *{day,night}*è più vicino a ciò che l'OP vuole.
derobert l'

25

Non è disponibile alcuna opzione lsper filtrare il nome file, ma nella maggior parte delle shell sono presenti estensioni globbingman bash /Pattern Matching

ksh

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

zsh

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

o:

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

bash

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

In ognuna di queste tre shell puoi farlo, ma nota che se uno dei casi non corrisponde a nessun file, quel modello rimarrà inesplorato (ad esempio *day* night1.txt othernight.txtse non c'è un nome file contenente day; vedi man bash /EXPANSIONo in /Brace Expansionparticolare):

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

In qualsiasi shell puoi fare:

ls -lrtd -- *day* *night*

In zsh, se c'è o no dayo nightfile, gli ultimi due comandi falliranno; impostare l' opzione nonomatcho csh_null_globoppure aggiungere (N)dopo ogni modello per evitarlo.


1
Che dire *{day,night}*. Lo modificherei, ma non so quali shell lo supportano?
Casuale 832

@ Random832 Funziona in bash, kshe zsh(nessuno ha bisogno di un globbing esteso), ma non sh- tuttavia, l'ultimo esempio di "tutte le shell" di Nahuel funziona sh.
Izkata,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.