2012-10-24 13 views
56

Questo dovrebbe essere semplice: voglio eseguire sed contro una stringa letterale, non un file di input. Se ti chiedi perché, è per, ad esempio, modificare valori memorizzati in variabili, non necessariamente dati di testo.sed con stringa letterale - non file di input

Quando faccio:

sed 's/,/','/g' "A,B,C" 

dove A, B, C è il letterale, che voglio cambiare a A ' 'B',' C

ottengo

Can't open A,B,C 

Come se pensasse che A, B, C è un file.

Ho provato pipe con eco:

echo "A,B,C" | sed 's/,/','/g' 

ottengo una richiesta.

Qual è il modo giusto per farlo?

risposta

85

Si dispone di un singolo conflitto di citazioni, in modo da utilizzare:

echo "A,B,C" | sed "s/,/','/g" 

Se si utilizza , si può fare troppo (<<< è una here-string):

sed "s/,/','/g" <<< "A,B,C" 

ma non

sed "s/,/','/g" "A,B,C" 

perché sed si aspettano i file come argu ment (s)

EDIT:

se si utilizza o qualsiasi altro quelli:

echo string | sed ... 
6

Opere come si vuole:

echo "A,B,C" | sed s/,/\',\'/g 
2

mia versione utilizzando le variabili in un script bash:

Trova un ny backslash e sostituire con barre in avanti:

input="This has a backslash \\" 

output=$(echo "$input" | sed 's,\\,/,g') 

echo "$output" 
Problemi correlati