2012-07-03 12 views
5

Voglio sostituire tutte le virgolette singole in una stringa con due virgolette singole usando sed. Ma quando la stringa contiene il comando sed & non sostituisce le virgolette singole che verranno dopo. per favore condividi alcune considerazioni al riguardo.Come scappare e mentre si usa sed

risposta

13

Non è necessario per sfuggire nulla nell'input:

$ echo "123 ' foo & b'ar" | sed "s/'/''/g" 
123 '' foo & b''ar 

Tuttavia, nella parte 'di ricambio' del comando s& ha un significato speciale: significa 'match'. Ecco perché il comando di cui sopra può essere riscritta come:

$ echo "123 ' foo & b'ar" | sed "s/'/&&/g" 
123 '' foo & b''ar 

fuga con un \ come tutto il resto che deve essere sfuggito, se necessario:

$ echo "123 ' foo & b'ar" | sed "s/'/'\&'/g" 
123 '&' foo & b'&'ar 
5

E 'più facile rispondere se si posta il tuo codice, ma suppongo che tu non sfugga alla e commerciale. Cambia & a \& se vuoi una e commerciale letterale.

Vedere la sezione 3.1.2 di The sed FAQ per una spiegazione più dettagliata, se siete curiosi.

+1

Ehi, voglio sostituire una stringa con 'e' nella mia stringa di output. Ho provato '" & "', '\ &', '\\ &', '\\\ &', '" '\ &' "' sulla base di diverse risposte sul web ma niente funziona, qualche suggerimento? – Ava

+1

'\ &' funziona per me. Per esempio, posso sostituire tutte le istanze di 'amp' con' & 'usando' sed 's/amp/\ &/g "'. Se i problemi persistono, è necessario inserire una nuova domanda con la stringa di input e il codice. –

+1

Sì, lo fa. Stavo usando un altro file che non ha avuto il resto :( – Ava

0

E 'di lavoro per me

bash>echo "'This is a string with 'single quote' & '&'" | sed "s/'/''/g" 
''This is a string with ''single quote'' & ''&''