2017-05-05 29 views
0

sedでXMLファイルを処理しています。置き換えられるファイルの内容は以下の通りです。sedに空白を無視させる

<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> 

ノードの内容をmyテキストに置き換える必要があります。私のテキストを含む変数には空白がないたびに動作します。スペースがあるとすぐにsedがエラーをスローします。 sedの

:-e式#1を、120文字:ここで終端されていない `s'のコマンド

を私は次のsedを使用

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" 

私のスクリプトに私のメッセージを作成する方法であります私の置き換えを行うためのステートメント

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

ただし、上記のコマンドはスペースで毎回壊れます。 sedが他の文字と同じように処理するように、どうすれば空白から脱出できますか?

+3

XMLパーサ(xmlstarlet、例えば)を使用してくださいように見える

よ使用を必要としていました。 – Cyrus

+0

私はXMLパーサを使用することができれば、私はそれについて尋ねているだろうが、私はSEDを使用する必要があります – svager

+0

@svagerなぜsedを使う必要があるのですか? – 123

答えて

1

私が質問を投稿するとすぐに、私はそれを理解しました。私は、コマンドがこの

sed -i 's|<NS1:message>.*<|<NS1:message>'"$text"'<|g' $workfile 
関連する問題