Queste sono davvero due domande e avrebbero dovuto essere divise. Ma poiché le risposte sono relativamente semplici, le metterò qui. Queste risposte sono per GNU grep specificamente.
a) egrep è uguale a grep -E . Entrambi indicano che dovrebbero essere usate "Extended Regular Expressions" invece di grep Espressioni regolari predefinite di . grep richiede le barre rovesciate per semplici espressioni regolari.
Dal man pagina:
Espressioni regolari di base rispetto a quelle estese
Nelle espressioni regolari di base i metacaratteri ? , + , { , | , ( e ) perdono il loro significato speciale; usa invece le versioni con barra rovesciata \? , \+ , \{ , \| , \( e \) .
Vedi il man pagina per ulteriori dettagli sulle convenzioni storiche e sulla portabilità.
b) Usa egrep '(.)\1{N}' e sostituisci N con il numero di caratteri che si desidera sostituire meno uno (poiché il punto coincide con il primo). Quindi, se vuoi abbinare un carattere ripetuto quattro volte, usa egrep '(.)\1{3}' .
Questo cercherà 2 o più occorrenze dello stesso carattere:
grep -E '(.)\1+' file
Se il tuo awk ha l'opzione -o, questo stamperà ogni corrispondenza su una nuova riga..
grep -Eo '(.)\1+' file
Per trovare corrispondenze con esattamente 3 corrispondenze:
grep -E '(.)\1{2}' file
O 3 o più:
grep -E '(.)\1{2,}' file
ecc..
modifica
In realtà @stephane_chazelas ha ragione sui riferimenti indietro e -E. L'avevo dimenticato. L'ho provato in BSD grep e GNU grep e funziona lì ma non è in altri grep. Dovresti utilizzare una delle versioni seguenti...
Versioni regolari di grep:
grep '\(.\)\1\{1,\}' file
grep -o '\(.\)\1\{1,\}' file
grep '\(.\)\1\{2\}' file
grep '\(.\)\1\{2,\}' file
Il -o anche l'opzione non è standard grep BTW (probabilmente se il tuo grep capisce -o può anche fare il riferimento all'indietro)..
Nota :grep -E '(.)\1{2,}' file e grep '\(.\)\1\{2\}' file sono errati come indicato da alexis e dovrebbero essere ignorati..
Innanzitutto, grazie a tutti per i vostri commenti e suggerimenti di supporto. A quanto pare ero già abbastanza vicino alla risposta.
Il problema principale riguardava:
C'è un modo semplice per cercare n occorrenze dello stesso carattere, ad es.
aa,tttttt
Risposta breve :
Le seguenti [variazioni di] comandi ripeteranno a almeno una e infinite volte
grep 'a\{1,}
grep -E \(a\)\{1,\}
egrep a{1,}
oppure, con le espressioni regolari GNU disponibiligrep a\+
Il numero di ripetizioni è impostato all'interno delle parentesi graffe, attraverso il pattern {min,max} → {n} ripeti esattamente n volte, {n,} ripeti almeno n volte e {n,m} ripeti almeno n ma al massimo m volte.
Così, di conseguenza, ha sollevato la questione secondaria :
La necessità di impostare contraccolpi è legata al comando Iuse?
Risposta breve :Sì, l'uso delle barre rovesciate dipende dall'utilizzo o meno di grep o egrep
grep:la barra rovesciata attiva i metacaratteri [usa le espressioni regolari di base]egrepbarra rovesciata de -attiva i metacaratteri [usa le espressioni regolari estese]
Poiché questa è la risposta breve, voglio fornire a coloro che si sono imbattuti in problemi simili, ho aggiunto il mio riepilogo di base di ciò di cui apparentemente si deve essere consapevoli, lavorando con grep e egrep .
Espressioni regolari di base, estese e GNU
Espressioni regolari di base
Utilizzato in grep , ed e sed comando
Le caratteristiche di base del set di espressioni regolari sono:
- La maggior parte dei metacaratteri, ad es.
? [ . \ )ecc. vengono attivati tramite una barra rovesciata. Se non è presente una barra rovesciata, verranno presi come (parte del) termine di ricerca. ^ $ \<e\>sono supportati senza una barra rovesciata- Nessun carattere abbreviato [
\b,\s, ecc.]
GNU Le espressioni regolari di base si aggiungono a queste
\?ripeti il carattere zero o una volta (c\?corrisponde acecc) ed è un'alternativa per\{0,1\}-
\+ripetere un carattere almeno una volta (c\+corrisponde acc,ccccccccecc.) ed è un'alternativa a\{1,\} -
\|è supportato (ad es.grep a\|bcercheràaob
grep -E consente al comando di utilizzare l'intero set di espressioni regolari estese:
Espressioni regolari estese [ERE]
Usato in egrep , awk e emacs è il Basic Set più alcune caratteristiche.
- I metacaratteri vengono disattivati tramite una barra rovesciata
- Nessun riferimento all'indietro
- altro:molte delle espressioni regolari magiche di solito possono fare per uno
GNU Estendi le espressioni regolari
aggiunge le seguenti funzionalità
- classi di stenografia
- quantificatori
I due collegamenti indirizzeranno uno a regular-expressions.info che, oltre al fantastico supporto che ho qui, mi ha davvero aiutato molto.