12
votes

Comment utilisez-vous des variables de script shell comme arguments à sed?

Ce que je voudrais faire est de quelque chose comme ce qui suit: xxx pré>

mais je reçois ce qui suit: p> xxx pré>

J'ai essayé de nombreuses variations. Je sais que c'est juste une question d'obtenir la cordes de citer. La raison pour laquelle je voudrais faire cela est de briser une longue commande SED pour la lisibilité. Devrais-je simplement utiliser un fichier de script SED (avec l'option -f) à la place? P>

mise à jour: stry> p>

Mon script est un peu plus complexe: p> xxx pré>

Après avoir retiré les citations simples, je reçois: p>

sed: -e expression #1, char 18: unknown option to `s'


0 commentaires

6 Réponses :


0
votes

Supprimer les guillemets simples de la valeur de Email CODE>.

EMAIL="-e s/SOMETHING//g"


0 commentaires

0
votes

Retirez les citations simples et il devrait fonctionner juste bien


0 commentaires


0
votes

Cela a fonctionné pour moi (entourez de citations doubles):

 env | sed -n /"$USERNAME"/p


1 commentaires

C'est parce que vous faites quelque chose de complètement différent.



17
votes

Pour ce type de problème de citation, vous pouvez faire l'un des éléments suivants:

#!/bin/sh
SED_ARG="-e 's/SOMETHING//g'"
echo SOMETHING | eval sed "$SED_ARG"
echo SOMETHING | sed $SED_ARG


0 commentaires

0
votes

Tout mettre dans des guillemets simples et laissez la coquille l'évaluer plus tard lorsqu'il est utilisé.

EMAIL='-e s/bar@baz.com//g'
EMAIL2='-e s/foo@bar.com//g;s/foo@bar.org//g'
echo "foo@bar.com foo@bar.org foo@baz.com bar@baz.com" | sed $EMAIL $EMAIL2


0 commentaires