Remplacez un mot par plusieurs lignes en utilisant sed?
Je suis en train de travailler sur un bash script qui doit préparer un E-Mail pour être envoyé à un utilisateur.
Il agrège des données, qui finit par être plusieurs lignes de trucs. Pour l'exemple stockées dans $DATA
.
Maintenant, après un peu de stfw j'ai trouvé quelques petites choses comme sed -ei "s/_data_/${DATA}/g" mail.tpl
et aussi sed remplacer avec variable avec plusieurs lignes. Aucune de ces travaux.
Maintenant, la question est, comment puis-je obtenir sed
à remplacer quelque chose avec plusieurs lignes de texte?
(Alternatives à la sed
sont également les bienvenus!)
source d'informationauteur Cobra_Fast
Vous devez vous connecter pour publier un commentaire.
Si vous construisez votre plusieurs lignes de texte avec "
\n
"s, cela fonctionne avec un simplesed
de commande:awk?
Je l'ai essayé et
sed 's/pattern/\na\nb\nc/g'
mais il ne fonctionne pas sur tous les systèmes. Ce n'travail est de mettre un\
suivi par un saut de ligne dans le foyer modèle, comme ceci:Ceci ajoute une ligne contenant
b
et une ligne contenantc
lorsque le motif est visible.De le mettre dans une variable, utiliser des doubles barres obliques inverses:
et puis:
Notez les guillemets.
Je dirais tout simplement le remplacement du sed, perl en ligne de commande comme ceci:
porteur d'anneau de réponse ne fonctionne pas pour moi; je pense que l'utilisation de
tr
il est mauvais, et la façon dont il est écrit, tout simplement, il supprime les retours à la ligne par l'utilisation deecho
.Au lieu de cela, j'ai utilisé
sed
. J'ai utilisé le code de une autre réponse pour remplacer les retours à la ligne (crédit: Zsolt Botykai). J'ai aussi prévu quelques signes dollar ($
) dans mon entrée j'ai donc pris soin de cela aussi. Vous pourriez avoir besoin afin d'ajouter d'autres de gérer les entrées. Notez l'utilisation de guillemets dansecho
pour conserver les retours à la ligne.Ensuite, vous pouvez utiliser
${ESCAPED_DATA}
danssed
:Juste pensé que je vous ferais partager.
Échapper à tous les retours à la ligne avec un
\
(sauf le dernier) a travaillé pour moi.Le dernier saut de ligne ne doit pas être échappés de ne pas briser le
s
commande.Exemple :
Vous pouvez mettre vos données dans un fichier temp et de l'exécution:
Echo de la variable temporaire au fichier texte.
Insérer un fichier texte dans la messagerie.tpl et supprimer données à partir de la messagerie.tpl
Ne sais pas si vous avez essayé de mettre "\n" dans le remplacez une partie
La première ligne a /\ pour des raisons de lisibilité. Chaque ligne après c'est un stand-alone ligne comme dans un éditeur de texte. La dernière ligne est autonome, une fois de plus, pour des raisons de lisibilité. Vous pouvez faire tout cela une seule ligne si nécessaire. Fonctionne sur Debian Jessie quand je l'ai testé.