2017-02-02 1 views
0

У меня есть логи с несколькими линиями, как «DEBUG MDM полезная нагрузка:» и на отдельных строках, после того, как это содержание XML, которые могут отличаться в длине, но всегда заканчивается тем же , Как пользователь tr и sed или другой метод объединить все содержимое xml в той же строке, что и «DEBUG MDM полезная нагрузка:»?Как проверить логи значений XML и объединить их на одной линии

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> 

Обновление: Следующая команда будет печатать то, что я хочу просто не могу понять, как принять это и изменить файл, чтобы поставить его на одну строку.

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: Хорошо, получилось. Теперь есть способ удалить существующие строки и добавить новую измененную строку на свое место?

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

Вы пробовали заменить '\ п <' с '<'? –

ответ

0

Чтобы заменить символ новой строки в месте, sed, вероятно, не инструмент, который вы ищете. Вместо этого попробуйте использовать Perl. Этот однострочный лайнер должен сделать трюк.

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. Теперь мне просто нужно добавить тр-д вкладки. СЕПГ -n "/ DEBUG MDM полезная нагрузка /,/<\/plist>/р" 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

Смежные вопросы