Je suis en train de traiter un fichier XML avec sed. Le contenu du fichier à remplacer est ci-dessous.Force sed à ignorer les espaces blancs
<NS1:myService>
<NS1:code>1</NS1:code>
<NS1:timestamp>Event_Time_Stamp</NS1:timestamp>
<NS1:log>
<NS1:logLevel>some_level</NS1:logLevel>
<NS1:loggerName>log_back</NS1:loggerName>
<NS1:message>loggable_message</NS1:message>
<NS1:node>none</NS1:node>
<NS1:host>my_host</NS1:host>
</NS1:log>
</NS1:myServices>
Je dois remplacer le contenu du noeud par mon texte. Il fonctionne à chaque fois que la variable qui contient mon texte n'a pas d'espace. Dès qu'il y a de l'espace sed jette une erreur.
sed: expression -e # 1, char 120: la commande `s sans terminaison
Voici comment je crée mon message dans mon script
text="APPLICATION:\t\t$app\n"
text=$text"RECEIVER:\t\t$receiver\n"
text=$text"LOGGABLE MESSAGE:\t$message\n"
text=$text"SENDER:\t\t$sender\n"
text=$text"DATE CREATED:\t$created\n"
J'utilise le sed suivant instruction pour faire mes remplacements
sed -i 's|<NS1:message>.*<|<NS1:message>'$text'<|g' $workfile
Cependant, la commande ci-dessus se brise à chaque fois dans l'espace . Comment puis-je échapper à l'espace blanc afin que sed le traite comme n'importe quel autre personnage?
Utilisez un analyseur XML (xmlstarlet, par exemple). – Cyrus
Si je pouvais utiliser l'analyseur XML j'aurais demandé à ce sujet mais je dois utiliser sed – svager
@svager Pourquoi avez-vous besoin d'utiliser sed? – 123