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, vous devez par exemple modifier des valeurs stockées dans des variables, mais pas nécessairement des données de texte.
Quand je 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 si on pensait que A, B, C était un fichier.
J'ai essayé de le mettre en écho:
echo "A,B,C" | sed 's/,/','/g'
Je reçois une invite.
Quelle est la bonne façon de le faire?
Vous avez un seul conflit entre guillemets, utilisez donc:
echo "A,B,C" | sed "s/,/','/g"
Si vous utilisez bash , vous pouvez aussi le faire (<<<
est un here-string
):
sed "s/,/','/g" <<< "A,B,C"
mais non
sed "s/,/','/g" "A,B,C"
parce que sed
attend le (s) fichier (s) en tant qu'argument (s)
[~ # ~] éditer [~ # ~] :
si vous utilisez ksh ou d’autres:
echo string | sed ...
Fonctionne comme vous le souhaitez:
echo "A,B,C" | sed s/,/\',\'/g
Ma version utilisant des variables dans un script bash:
Recherchez les barres obliques inverses et remplacez-les par des barres obliques:
input="This has a backslash \\"
output=$(echo "$input" | sed 's,\\,/,g')
echo "$output"