Domanda: Puoi spiegare come usare gli operatori OR, AND e NOT nel comando Unix grep con alcuni esempi?
Risposta: In grep, abbiamo opzioni equivalenti agli operatori OR e NOT. Non ci sono grep E operatore. Ma puoi simulare AND usando i modelli. Gli esempi riportati di seguito ti aiuteranno a capire come usare OR, AND e NOT nel comando Linux grep.
Il seguente file employee.txt viene utilizzato negli esempi seguenti.
$ cat employee.txt 100 Thomas Manager Sales $5,000 200 Jason Developer Technology $5,500 300 Raj Sysadmin Technology $7,000 400 Nisha Manager Marketing $9,500 500 Randy Manager Sales $6,000
Sapevi già che grep è estremamente potente sulla base di questi esempi di comandi grep.
Grep OR Operatore
Utilizzare uno dei seguenti 4 metodi per grep OR. Preferisco il metodo numero 3 menzionato di seguito per l'operatore grep OR.
1. Grep OPPURE Usando \|
Se usi il comando grep senza alcuna opzione, devi usare \| per separare più pattern per la condizione o.
grep 'pattern1\|pattern2' filename
Ad esempio, grep Tech o Sales dal file employee.txt. Senza la barra posteriore davanti al tubo, quanto segue non funzionerà.
$ grep 'Tech\|Sales' employee.txt 100 Thomas Manager Sales $5,000 200 Jason Developer Technology $5,500 300 Raj Sysadmin Technology $7,000 500 Randy Manager Sales $6,000
2. Grep OR Usando -E
grep -E opzione è per regexp estesa. Se usi il comando grep con l'opzione -E, devi solo usare | per separare più pattern per la condizione o.
grep -E 'pattern1|pattern2' filename
Ad esempio, grep Tech o Sales dal file employee.txt. Basta usare | per separare più pattern OR.
$ grep -E 'Tech|Sales' employee.txt 100 Thomas Manager Sales $5,000 200 Jason Developer Technology $5,500 300 Raj Sysadmin Technology $7,000 500 Randy Manager Sales $6,000
3. Grep OPPURE Utilizzo di egrep
egrep è esattamente lo stesso di 'grep -E'. Quindi, usa egrep (senza alcuna opzione) e separa più pattern per la condizione o.
egrep 'pattern1|pattern2' filename
Ad esempio, grep Tech o Sales dal file employee.txt. Basta usare | per separare più pattern OR.
$ egrep 'Tech|Sales' employee.txt 100 Thomas Manager Sales $5,000 200 Jason Developer Technology $5,500 300 Raj Sysadmin Technology $7,000 500 Randy Manager Sales $6,000
4. Grep OPPURE Utilizzo di grep -e
Usando l'opzione grep -e puoi passare solo un parametro. Utilizza l'opzione -e multipla in un unico comando per utilizzare più modelli per la condizione o.
grep -e pattern1 -e pattern2 filename
Ad esempio, grep Tech o Sales dal file employee.txt. Usa l'opzione multiple -e con grep per i pattern OR multipli.
$ grep -e Tech -e Sales employee.txt 100 Thomas Manager Sales $5,000 200 Jason Developer Technology $5,500 300 Raj Sysadmin Technology $7,000 500 Randy Manager Sales $6,000
Grep E
5. Grep E usando -E 'pattern1.*pattern2'
Non esiste un operatore AND in grep. Ma puoi simulare AND usando l'opzione grep -E.
grep -E 'pattern1.*pattern2' filename grep -E 'pattern1.*pattern2|pattern2.*pattern1' filename
L'esempio seguente raccoglierà tutte le righe che contengono sia "Dev" che "Tech" (nello stesso ordine).
$ grep -E 'Dev.*Tech' employee.txt 200 Jason Developer Technology $5,500
L'esempio seguente raccoglierà tutte le righe che contengono sia "Manager" che "Sales" (in qualsiasi ordine).
$ grep -E 'Manager.*Sales|Sales.*Manager' employee.txt
Nota: L'uso delle espressioni regolari in grep è molto potente se sai come usarlo in modo efficace.
6. Grep AND usando il comando Multiple grep
Puoi anche utilizzare più comandi grep separati da pipe per simulare uno scenario AND.
grep -E 'pattern1' filename | grep -E 'pattern2'
L'esempio seguente raccoglierà tutte le righe che contengono sia "Manager" che "Sales" nella stessa riga.
$ grep Manager employee.txt | grep Sales 100 Thomas Manager Sales $5,000 500 Randy Manager Sales $6,000
Grep NON
7. Grep NON usa grep -v
Usando grep -v puoi simulare le condizioni NOT. L'opzione -v è per invertire la corrispondenza. cioè corrisponde a tutte le linee tranne il modello dato.
grep -v 'pattern1' filename
Ad esempio, visualizza tutte le righe tranne quelle che contengono la parola chiave "Vendite".
$ grep -v Sales employee.txt 200 Jason Developer Technology $5,500 300 Raj Sysadmin Technology $7,000 400 Nisha Manager Marketing $9,500
Puoi anche combinare NOT con altri operatori per ottenere alcune potenti combinazioni.
Ad esempio, quanto segue visualizzerà Gestore o Sviluppatore (il bot ignora le vendite).
$ egrep 'Manager|Developer' employee.txt | grep -v Sales 200 Jason Developer Technology $5,500 400 Nisha Manager Marketing $9,500