2013-05-19 16 views
7

Eseguo questo comando di sostituzione su Ubuntu 12.04.sed "Fine intervallo non valido"

$ sed -e "s/([a-zA-Z0-9.-/\\ :]+)/\1/g" 

Tuttavia, viene generato il seguente errore.

sed: espressione -e # 1, char 27: Fine del campo non valido

posso ricordare la stessa espressione funziona su MacOSX.
Puoi descrivere perché il comando fallisce?

risposta

9

Puoi risolverlo in due modi. Uno di loro è quello di utilizzare -r interruttore, per evitare la fuga di caratteri speciali e spostare - nella gamma alla prima o ultima posizione ed evitare il suo significato speciale, sarebbe come:

sed -re "s/([a-zA-Z0-9./\\ :-]+)/\1/g" 

caso contrario, sarà necessario sfuggire sia ( , ) e +, ad esempio:

sed -e "s/\([a-zA-Z0-9./\\ :-]\+\)/\1/g" 
+0

Thx! Funziona sulla riga di comando. Però, [qui] (http://stackoverflow.com/questions/16637799/sed-error-invalid-reference-1-on-s-commands-rhs) è una domanda di follow-up. – JJD

Problemi correlati