sed con cadena literal - no archivo de entrada

97

Esto debería ser fácil: quiero ejecutar sed contra una cadena literal, no un archivo de entrada. Si se pregunta por qué, es para, por ejemplo, editar valores almacenados en variables, no necesariamente datos de texto.

Cuando lo hago:

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

donde A, B, C es el literal que quiero cambiar a A ',' B ',' C

yo obtengo

Can't open A,B,C

Como si pensara que A, B, C es un archivo.

Intenté hacer eco:

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

Recibo un mensaje.

¿Cuál es la forma correcta de hacerlo?

anfibio
fuente

Respuestas:

153

Tienes un conflicto de comillas simples, así que usa:

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

Si usa , tú también puedes hacer ( <<<es un here-string):

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

pero no

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

porque sedesperar archivo (s) como argumento (s)

EDITAR :

si utiliza o cualquier otro:

echo string | sed ...
Gilles Quenot
fuente
1
extraño, no funciona para mí ... me doy cuenta de que hace algún tiempo que se publicó, pero una desaprobación extraña si ese es el problema
superhéroe
10

Funciona como quieras:

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

Mi versión usando variables en un script bash:

Busque las barras invertidas y reemplácelas con barras inclinadas hacia adelante:

input="This has a backslash \\"

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

echo "$output"
phyatt
fuente