sed con stringa letterale - non file di input


92

Dovrebbe essere facile: voglio eseguire sed su una stringa letterale, non su un file di input. Se ti chiedi perché, è per, ad esempio, modificare i valori memorizzati nelle variabili, non necessariamente i dati di testo.

Quando io faccio:

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

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

ottengo

Can't open A,B,C

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

Ho provato a collegarlo all'eco:

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

Ricevo un messaggio.

Qual è il modo giusto per farlo?

Risposte:


149

Hai un conflitto tra virgolette singole, quindi usa:

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

Se usi , puoi fare anche tu ( <<<è un here-string):

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

ma no

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

perché sedaspettarsi file come argomento (i)

MODIFICA :

se usi o qualsiasi altro:

echo string | sed ...

1
strano, non funziona per me ... rendendomi conto che è stato pubblicato qualche tempo fa, ma strana deprecazione se questo è il problema
supereroe

10

Funziona come vuoi:

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

5

La mia versione che utilizza le variabili in uno script bash:

Trova eventuali barre rovesciate e sostituiscile con barre in avanti:

input="This has a backslash \\"

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

echo "$output"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.