将.str文件中的.xsl内容提取到xsl / txt文件

时间:2015-06-24 18:58:01

标签: linux string grep cat computer-forensics

我正在进行一些取证学习,并获得了一个包含整个.xsl文件的.str文件:

Content of the xsl file

我需要从.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

从第20893696行到20919817

2 个答案:

答案 0 :(得分:0)

我可能会使用perl:

#!/usr/bin/perl

use strict;
use warnings;

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

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

E.g。

$/ = \80; 

一次读取80个字节。

答案 1 :(得分: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}'

这会使用substrsub来删除不需要的部分行。