Je ne trouve aucune documentation sur le sed -ecommutateur. Pour un remplacement simple, en ai-je besoin?
par exemple
sed 's/foo/bar/'CONTRE
sed -e 's/foo/bar/'Je ne trouve aucune documentation sur le sed -ecommutateur. Pour un remplacement simple, en ai-je besoin?
par exemple
sed 's/foo/bar/'CONTRE
sed -e 's/foo/bar/'Réponses:
De la page de manuel:
-e script, --expression=script
    add the script to the commands to be executedVous pouvez donc utiliser plusieurs -eoptions pour créer un script à partir de nombreuses parties.
$ sed -e "s/foo/bar/" -e "/FOO/d"Tout d'abord remplacer foopar bar, puis supprimer toutes les lignes contenant FOO.
-e
                    Cela pourrait fonctionner pour vous:
sed -e '/foo/i\' -e 'bar' -e '/fred/a\' -e 'barny' -e '/harry/c\' -e 'potter' fileDans chaque cas, les commandes i(insérer), a(ajouter) et c(modifier) doivent être terminées par une nouvelle ligne.
Normalement, les commandes peuvent être séparées par ;exemple /foo/d;/bar/det groupées par {...} exemple, /foo/{h;d}mais pour les i,a,ccommandes, cela -efournit un moyen de séparer les commandes.
L’alternative consiste à utiliser le shell (bash) pour insérer une nouvelle ligne:
sed '/foo/i\bar'$'\n''/fred/a\barney'$'\n''/harry/c\potter' file-e, plutôt que par des points-virgules. Cela ne fonctionnera pas: sed ':a; /x/ { s/x/y/g; ba }; q' <<< "jxm". Mais cette volonté:sed -e ':a' -e '/x/ { s/x/y/g; ba' -e '}; q' <<< "jxm"
                    must be terminated with a newlinephrase signifie ici. Quand je l' ai testé ici dans mon cygwin, cela fonctionne: sed '/foo/i\bar' file. Alors, maintenant que nous pouvons fusionner les expressions séparées en une seule, cela nous ramène à la question initiale: quel est le véritable but de la -e?
                    Dans l'aide pour sedvous, ce -edrapeau signifie:
 -e script, --expression=script
                 add the script to the commands to be executedMais vous n'êtes pas le premier à être confus après avoir rencontré -e. Dans votre exemple sed 's/foo/bar/'et sed -e 's/foo/bar/'sont équivalents. Dans les deux cas, s/foo/bar/le script est exécuté par sed. La deuxième option est plus explicite, mais ce n’est probablement pas la raison pour laquelle vous voyez souvent -eutilisé. La raison en est que -ecela permet d’utiliser plus d’un script avec le même appel de sed. Cela laisse toujours la question pourquoi l'utiliser si vous utilisez un seul script? L'exemple suivant pourrait expliquer cela:
echo "foo" | sed -e 's/foo/bar/' -e 's/bar/foo'
Sera sortie "foo".
cependant,
echo "foo" | sed 's/foo/bar/' -e 's/bar/foo'
échouera car sedinterprète maintenant le premier s/foo/barcomme un nom de fichier. Par conséquent, pour vous faciliter la vie, vous pouvez déjà commencer à utiliser le -edrapeau aujourd'hui. De cette façon, vous pouvez désormais ajouter à la commande un script supplémentaire en utilisant -e <script>.
NB Dans d'autres réponses, l' ;utilisation de plusieurs scripts a été suggérée. Bien que cela soit techniquement possible dans certains cas, cela n’est pas encourageant, car cela conduit rapidement à une lecture très difficile du code. Voir un exemple ici: https://www.grymoire.com/Unix/Sed.html#uh-61
man sed?