2013-03-19 13 views
9

Ho provato quasi tutto (credo) ma non ha funzionato. (Sistema operativo: Ubuntu 12.04)Personaggio Spazio Regex in Sed

Espressioni da abbinare (rimosso dal file di testo):

a c 4 
a k 23 
o s 1 

Quello che ho cercato:

's/[[a-z][:space:][a-z][:space:][0-9]]\{1,\}//gi' 
's/.\s.\s[0-9]+//g' 
's/[:alpha:][:space:][:alpha:][:space:][:digit:]+' 

risposta

13

Questo dovrebbe corrispondere:

sed 's/[a-z][ ]*[a-z][ ]*[0-9]*//gi' 

Al primo tentativo manca un paio di parentesi quadre e non è necessario il più esterno o NE:

sed 's/[a-z][[:space:]][a-z][[:space:]][0-9]\{1,\}//gi' input 

tuo secondo esempio non riesce perché è necessario sfuggire alla +, e ancora funziona solo in GNU sed:

sed 's/.\s.\s[0-9]\+//g' input 

anche alcuni problemi simili con l'ultimo:

sed 's/[[:alpha:]][[:space:]][[:alpha:]][[:space:]][[:digit:]]\+//' input 
1

Quello al centro è chiudi! Devi sfuggire al segno più per una ragione che è oltre me. Ho anche sostituito il punto "." con "[a-z]" in modo che corrisponda solo alle lettere. versione portatile

sed 's/[a-z]\s[a-z]\s[0-9]\+//g' 

Bonus per anziani sed -versions (Ciao, gli utenti Mac!). Alcuni sed implementazioni sono schizzinosi sul "+":

sed 's/[a-z]\s[a-z]\s[0-9][0-9]*//g' 
1

[...] definisce una classe di caratteri. [a-z] corrisponde a qualsiasi carattere da a a z. Per abbinare caratteri consecutivi, devi usare una classe per ciascuno: [a-z][[:space:]][a-z].

Per + per avere il significato speciale, è necessario eseguire il backslash: [0-9]\+.

Le classi di caratteri con nome funzionano solo all'interno di classi di caratteri, ad esempio [[:alpha:]][[:space:]].