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]egrep
barra 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 ac
ecc
) ed è un'alternativa per\{0,1\}
-
\+
ripetere un carattere almeno una volta (c\+
corrisponde acc
,cccccccc
ecc.) ed è un'alternativa a\{1,\}
-
\|
è supportato (ad es.grep a\|b
cercheràa
ob
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.