2017-05-05 1 views
0

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?

+3

Utilisez un analyseur XML (xmlstarlet, par exemple). – Cyrus

+0

Si je pouvais utiliser l'analyseur XML j'aurais demandé à ce sujet mais je dois utiliser sed – svager

+0

@svager Pourquoi avez-vous besoin d'utiliser sed? – 123

Répondre

1

Dès que j'ai posté la question, j'ai compris. Je avais besoin yo utilisation "

commande ressemble à ce

sed -i 's|<NS1:message>.*<|<NS1:message>'"$text"'<|g' $workfile