GNU/Linux >> Linux Esercitazione >  >> Linux

In che modo le espressioni regolari differiscono dai caratteri jolly utilizzati per filtrare i file?

Mentre utilizziamo * per denotare zero o più caratteri precedenti in grep , utilizziamo *.c per trovare tutti i file C quando lo utilizziamo con ls comando come ls *.c . Qualcuno potrebbe dire come l'uso di * differisce in questi due casi?

Risposta accettata:

Il globbing del nome del file della shell e le espressioni regolari utilizzano alcuni degli stessi caratteri e hanno scopi simili, ma hai ragione, non sono compatibili. Il globbing dei nomi di file è un sistema molto meno potente.

Nel globbing dei nomi dei file:

  • * significa "zero o più caratteri"

  • ? significa "qualsiasi singolo carattere"

Ma nelle espressioni regolari, devi usare .* per significare "zero o più caratteri" e . significa "qualsiasi singolo carattere". Un ? significa qualcosa di completamente diverso nelle espressioni regolari:zero o un'istanza dell'elemento RE precedente.

Parentesi quadre ([] ) sembrano funzionare allo stesso modo in entrambi i sistemi sul sistema su cui lo sto digitando, almeno per casi semplici. Ciò include cose come le classi di caratteri POSIX (ad es. [:alpha:] ). Detto questo, se hai bisogno che i tuoi comandi funzionino su molti tipi di sistema diversi, ti consiglio di non usare qualcosa che vada oltre le cose elementari come elenchi di caratteri (ad es. [abeq] ) e forse intervalli di caratteri (ad es. [a-c] ).

Queste differenze significano che i due sistemi sono direttamente intercambiabili solo per casi semplici. Se hai bisogno della corrispondenza regolare dei nomi dei file, devi farlo in un altro modo. find -regex è un'opzione. (Nota che c'è anche find -name , a proposito, che usa la sintassi glob.)


Linux
  1. Come utilizzare Wget per scaricare in modo ricorsivo file da una directory web?

  2. Come elencare i file eliminati di recente da una directory?

  3. Come copiare i file dal dockerfile all'host?

  4. Come spostare tutti i file dalla directory corrente alla directory superiore?

  5. Come impedire a un processo di scrivere file

Come cercare file dal Terminale su Linux

Come condividere in modo sicuro i file dalla riga di comando con ffsend in Linux

Come escludere file di determinate dimensioni dalla copia in Linux

Come scaricare file da server Linux remoti

Come rimuovere (^M) caratteri da un file in Linux

Come rimuovere tutti i caratteri di spazio bianco da un file di testo