2012-02-09 23 views
16

Sto cercando di utilizzare questo comando:Sed Trova e sostituisci con parentesi graffe

sed -i 's#\{test1\}#test2#' /example/myfile.txt 

Per sostituire le istanze di {test1} con test2.

ottengo l'errore:

sed: -e expression #1, char 17: Invalid preceding regular expression 

Am non ho sfuggire correttamente le parentesi graffe?

+1

Hmm .. Ho rimosso le barre posteriori e sembra funzionare bene. – atdev

risposta

22
sed -i 's#{test1}#test2#' /example/myfile.txt 

Non è necessario fuggire {}

21

Non sei sfuggire alla parentesi graffe a tutti. In sed, le espressioni regolari predefinite sono BRE, dove \{ e \} indicano un'espressione di intervallo. Poiché test1 non è un intervallo, il tuo BRE non è corretto.

per risolvere il problema, è possibile eliminare le barre inverse (parentesi graffe non sono speciali in BRE) o tenerlo lo stesso e dire sed utilizzare ERE (-r contrassegna con GNU sed, -E contrassegna con BSD/MacOSX sed).

+0

TIL BRE ERE. I BRE sono piuttosto utili nel mondo "sed". – ericsoco