122 votes

sed avec une chaîne littérale - pas un fichier d'entrée

Cela devrait être facile : je veux exécuter sed contre une chaîne littérale, pas un fichier d'entrée. Si vous vous demandez pourquoi, c'est pour, par exemple, modifier des valeurs stockées dans des variables, pas nécessairement des données textuelles.

Quand je le fais :

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

où A,B,C est le littéral que je veux changer en A', 'B', 'C

Je reçois

Can't open A,B,C

Comme s'il pensait que A, B, C est un fichier.

J'ai essayé de le passer à echo :

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

Je reçois un message.

Quelle est la bonne façon de procéder ?

173voto

sputnick Points 31663

Vous avez un conflit de guillemets simples, alors utilisez :

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

Si vous utilisez bash vous pouvez le faire aussi ( <<< est un here-string ) :

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

mais pas

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

parce que sed attend le(s) fichier(s) comme argument(s)

EDITAR :

si vous utilisez ksh ou tout autre :

echo string | sed ...

13voto

ferrants Points 247

Ça marche comme vous voulez :

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

8voto

phyatt Points 6647

Ma version utilisant des variables dans un bash script :

Trouvez les barres obliques inverses et remplacez-les par des barres obliques avant :

input="This has a backslash \\"

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

echo "$output"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X