2017-02-02 2 views
0

"DEBUG MDM payload:"のような複数の行を持つログファイルがあり、その後に別々の行に長さが異なるxmlコンテンツがありますが、 。どのように私はユーザーtrとsedまたは別の方法で "DEBUG MDM payload:"と同じ行のすべてのXMLコンテンツを結合できますか?xml値のログファイルをスキャンして1行にまとめる方法

2017-01-26T10:54:28.712+0100 - CORE {wff-device-thread-15 : deviceRestExecuteWorkflow.deviceRestExecuteActivity.EventQueueConsumer} device.ios.management|logger [{{Correlation,dhdjwdw-3a44-4b0d-aa52-dwdwdwdwdw}{Uri,PUT /S29112264/ios/mdm2/dwdwdwdw-c7d2-465c-be44-dwdwdwdw}{host,de0-server.name.fqdn}}] - DEBUG MDM payload: 
<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
<key>Command</key> 
<string>dd2c2a59-2007-4863-9c8c-dgfhgfh666666</string> 
<key>command</key> 
<dict/> 
<key>Status</key> 
<string>Approved</string> 
<key>UDID</key> 
<string>90f0c56287474782748274827487842cc64c2fc4</string> 
</dict> 
</plist> 

アップデート:次のコマンドは、私が欲しいものを印刷して、それを取ってファイルを改行して1行にする方法を示します。

sed -n "/\/ios\/mdm2\DEBUG MDM payload/,/<\/plist>/p" 

更新2:もう少しいいですが、まだいくつかのタブがあります。次にタブを削除する方法を見つけようとしています。

sed -n "/DEBUG MDM payload/,/<\/plist>/p" fake_log.txt | tr -d "\r" | tr -d "\n" 

更新3:OK、取得しました。今、既存の回線を削除し、この新しく変更された回線をその場所に追加する方法はありますか?

sed -n "/DEBUG MDM payload/,/<\/plist>/p" fake_log.txt | tr -d "\r" | tr -d "\n" | tr -d "\t" 
+0

'\ n <'を '<'に置き換えてみましたか? –

答えて

0

改行を置き換えるには、sedはおそらくあなたが探しているツールではありません。代わりにPerlを使ってみてください。この1ライナーはトリックを行う必要があります。

perl -i -a -n -e '$matched=true if /DEBUG MDM payload/; if ($matched && /<\/plist>/) {print "@F\n"; $matched=false;} elsif ($matched) {print @F;} else {print "@F\n";}' log.txt 

はちょうど -iオプションを削除し、予行演習を行うには、それが出力の代わりに、代わりにファイルを変更します。

+0

一種の作業ですが、\ rのためにもう一つ追加しなければなりませんでした。今、私はtr -dタブも必要です。 sed -n "/ DEBUG MDMペイロード/、/ <\/plist>/p" fake_log.txt | tr -d "\ r" | tr -d "\ n" – rcmpayne

+0

これをインプレースで変更したい場合は、間違ったツールを探しています。ここの説明を参照してください:http://stackoverflow.com/questions/1251999/how-can-i-replace-a-newline-n-using-sed – miken32

関連する問題