Sed 如何扫描日志文件中的xml值并将它们合并到一行中

Sed 如何扫描日志文件中的xml值并将它们合并到一行中,sed,tr,Sed,Tr,我有一个包含多行的日志文件,比如“DEBUG MDM payload:”,然后在单独的行上是xml内容,它的长度可能不同,但结尾总是相同的。如何使用tr和sed或其他方法将所有xml内容组合在同一行中作为“DEBUG MDM payload:” 2017-01-26T10:54:28.712+0100-CORE{wff-device-thread-15:DeviceRequestExecuteWorkflow.DeviceRequestExecuteActivity.EventQueueCons

我有一个包含多行的日志文件,比如“DEBUG MDM payload:”,然后在单独的行上是xml内容,它的长度可能不同,但结尾总是相同的。如何使用tr和sed或其他方法将所有xml内容组合在同一行中作为“DEBUG MDM payload:”

2017-01-26T10:54:28.712+0100-CORE{wff-device-thread-15:DeviceRequestExecuteWorkflow.DeviceRequestExecuteActivity.EventQueueConsumer}device.ios.management{logger[{{Correlation,dhdjwdw-3a44-4b0d-aa52-DWDWDW}{Uri,PUT/S29112264/ios/mdm2/DWDWDW-c7d2-465c-be44-DW-DW}主机,DEFQ0服务器名}调试}{
命令
dd2c2a59-2007-4863-9c8c-dgfhgfh666666
命令
地位
经核准的
乌迪德
90F0C5628747478274827487842CC64C2FC4
更新:下面的命令将打印我想要的内容,只是不知道如何获取它,并更改文件以将其放在一行上

sed -n "/\/ios\/mdm2\DEBUG MDM payload/,/<\/plist>/p"
sed-n/\/ios\/mdm2\DEBUG-MDM-payload/,//p”
更新2:现在可以再进一步了,但在某些情况下我仍然有一些标签。下一步尝试找到删除选项卡的方法

sed -n "/DEBUG MDM payload/,/<\/plist>/p" fake_log.txt | tr -d "\r" | tr -d "\n"
sed-n”/DEBUG MDM payload/,//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"
sed-n”/DEBUG MDM payload/,//p“fake_log.txt | tr-d”\r“| tr-d”\n“| tr-d”\t

要替换换行符,
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
perl-i-a-n-e'$matched=true if/DEBUG-MDM-payload/;if($matched&&//){print“@F\n”;$matched=false;}elsif($matched){print@F;}else{print“@F\n”;}log.txt

要进行试运行,只需删除
-i
选项,它就会输出,而不是更改文件的位置。

您是否尝试过替换
\n工作区,但我必须为\r\n添加第二个。现在我只需要tr-d标签。sed-n“/DEBUG MDM payload/,//p”fake_log.txt | tr-d“\r”| tr-d“\n”如果您想在适当的位置更改它,那么您正在为作业使用错误的工具。请参见此处的讨论:
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