sed avec chaîne littérale--pas de fichier d'entrée
cela devrait être facile: je veux lancer sed contre une chaîne littérale, pas un fichier d'entrée. Si vous vous demandez pourquoi, c'est par exemple pour éditer des valeurs stockées dans des variables, 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 s'il pensait que A,B,C est un dossier.
j'ai essayé de la tuyauterie à l'écho:
echo "A,B,C" | sed 's/,/','/g'
j'ai une invite.
Quelle est la bonne façon de le faire?
3 réponses
vous avez un conflit de guillemets simples, alors utilisez:
echo "A,B,C" | sed "s/,/','/g"
si vous utilisez bash , vous pouvez faire aussi ( <<<
est un here-string
):
sed "s/,/','/g" <<< "A,B,C"
, mais pas
sed "s/,/','/g" "A,B,C"
parce que sed
s'attendre à de fichier(s) argument(s)
MODIFIER :
si vous utilisez ksh ou tout autre :
echo string | sed ...
ma version utilisant des variables dans un script bash:
remplacer par des barres obliques rétrogrades:
input="This has a backslash \"
output=$(echo "$input" | sed 's,\,/,g')
echo "$output"