0

我正在做一些取证学习,并得到一个包含整个 .xsl 文件的 .str 文件:

xsl 文件的内容

我需要从 .str 文件中提取所有 .xsl 文件。我用过类似的东西:

cat pc1.str | grep "<From>" > talk.txt

问题是我得到了几乎所有的文本,但不是可读的格式。我想我只能从里面得到所有的东西。

你能帮我把文本从<?xml version="1.0"?></log>吗?

为清楚起见进行编辑:我想获取所有文本,从 xml 开始,直到 /log。

.str 文件由strings.

这是我正在使用的实际文件: https ://www.dropbox.com/s/j02elywhkhpbqvg/pc1.str?dl=0

从线2089369620919817

4

2 回答 2

0

我可能会使用 perl:

#!/usr/bin/perl

use strict;
use warnings;

while ( <> ) {
     print if m,<?xml version, .. m,</log>,
}

这利用了“范围”运算符,如果文件位于两个标记之间,则返回 true。默认情况下,它使用$/换行符的记录分隔符。如果您的数据有换行符,这很容易,但您可以改为基于字节进行迭代。(请记住,您可能不得不担心重叠边界)。

例如

$/ = \80; 

一次将读取 80 个字节。

于 2015-06-24T19:01:11.143 回答
0

如果您想要.str文件的所有行,从包含的行到包含<?xml version="1.0"?>的第一行,</log>那么这应该可以工作。

awk '/<?xml version="1.0"?>/{p=1} p; /<\/log>/{exit}' pc1.str

匹配开场线并设置p=1. 如果p是真值,则打印当前行。将行与结束标签匹配并退出。

如果您想要输出文件中没有基数字段,那么这样的东西应该可以工作。

cut -f 2 pc1.str | awk '/<?xml version="1.0"?>/{p=1} p; /<\/log>/{exit}'

这增加cut了修剪第一个基数字段(awk 在字段范围内不太好)。

如果您还想在开始 xml 标记之前和结束</log>标记之后忽略任何内容,那么这样的东西应该可以工作(未经测试)。

cut -f 2 pc1.str | awk '/<?xml version="1.0"?>/{p=1; $0=substr($0, 1, index($0, "<?xml version=\"1.0\"?>"))} {sub(/^.*<\/log>/, $0, "&")} p; /<\/log>/{exit}'

这使用substrandsub删除不需要的部分行。

于 2015-06-24T19:28:51.280 回答