2013-10-03 5 views
5

Sto cercando un codice regex che elenca tutte le righe che contengono un a OR un i. Ho provato questo:espressioni regolari per un carattere o un altro?

grep -E '[(a|i)]{1}' testFile.txt 

ma questo mi dà le parole che contengono una o io e le parole che contengono un en i. Cosa c'è che non va?

+0

cosa succede se si prova * (a | i) * – Darka

+3

Per la cronaca, la regex per "a o i (o entrambi)" è semplicemente "[ai]' - "grep" riporterà una corrispondenza in qualsiasi punto della linea, quindi non è necessario che i caratteri jolly di inizio o fine siano. – tripleee

+0

Se non ci può essere nient'altro sulla riga, 'grep '^ [ai] $' file' o' grep -Fx -e a -e i file'. – tripleee

risposta

2

si può ottenere che, con:..

grep -E "^[^ai]*(a|i){1}[^ai]*$" testFile.txt 
+0

Il problema è che questo mi dà un grande spazio nero silenzioso. – user2810895

+0

Puoi fornire un esempio quando non funziona correttamente? Ho provato su [questo] (http://pastebin.com/Wkegi3Me), funziona bene –

+0

Il file contiene lettere greche. La regex dovrebbe mostrare ad esempio: beta, ma potrebbe NON mostrare ad esempio iota, perché questa parola contiene sia un che un – user2810895

0

Se si desidera un OR esclusivo quindi provare questo: grep -E '^[^i]*a[^i]*$|^[^a]*i[^a]*$'

Problemi correlati