我正在进行一些取证学习,并获得了一个包含整个.xsl文件的.str文件:
我需要从.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
。
答案 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}'
这会使用substr
和sub
来删除不需要的部分行。