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?

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 ...

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


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"
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.