Originariamente inviato da zenzero
I risultati che ho ottenuto però, non contengono solo del testo ma, anche i caratteri numerici che non dovrebbero matchare con il pattern della regular expression. Credo la spiegazione giusta sia quella di PinguinoGoloso ma non riesco ancora a metterla a fuoco.
ciao
Allora... secondo me...
la descrizione che ha indicato PinguinoGoloso non e' propriamente corretta.
Le RE sono si avide (basta testare qualche RE con ".*" per rendersene conto. ma nel caso in oggetto,
di avidita' ne ho vista ben poca.
Nel linguaggio reg-exp, la scrittura "[^0-9]" indica un qualunque carattere NON numerico.
Ricercare una riga di testo (grep) in un file, tale per cui la condizione di cui sopra sia soddisfatta, porta ad ottenere i risultati precedenti.
codice:
[cacao74@tweety ~]$ cat cacao.txt
0123456789
dante12345
12345dante
[cacao74@tweety ~]$ cat cacao.txt | grep -E "[^0-9]"
dante12345
12345dante
Altro esempio spero chiarificatore:
codice:
[cacao74@tweety ~]$ echo "12a34" | grep -E "[^0-9]"
12a34
[cacao74@tweety ~]$ echo "1234" | grep -E "[^0-9]"
...nessun risultato...
[cacao74@tweety ~]$ echo $?
1
Volendo "esagerare" con la ricerca del testo che hai riportato: :-)
codice:
[cacao74@tweety ~]$ cat cacao.txt | grep -E "[^0-9]{1,5}"
dante12345
12345dante
[cacao74@tweety ~]$ cat cacao.txt | grep -E "[^0-9]{6}"
[cacao74@tweety ~]$ echo $?
1
[cacao74@tweety ~]$ cat cacao.txt | grep -E "^[0-9]*$"
0123456789
Se cio' non bastasse:
codice:
[cacao74@tweety ~]$ cat cacao.txt | grep -oE "[0-9]+"
0123456789
12345
12345
[cacao74@tweety ~]$ cat cacao.txt | grep -oE "[^0-9]+"
dante
dante
Nel link che ti ha fornito PinguinoGoloso trovi sufficienti dettagli per schiarire eventuali dubbi.
Dimenticavo... nella pagina di manuale di "grep" viene chiaramente specificato:
A bracket expression is a list of characters enclosed by [ and ]. It
matches any single character in that list; if the first character of
the list is the caret ^ then it matches any character not in the list.
ciao