4

我正在使用 Catfish 查找包含某些文本的文件。找到的一些文件而不是纯文本包含一些看起来像十六进制转储的东西:

3c3f 7068 700a 0a66 756e 6374 696f 6e20
7573 6572 5f65 7869 7374 7328 2475 6e29
207b 0a09 7265 7475 726e 2074 7275 653b
0a7d 0a0a 0a3f 3e00 0000 0000 0000 0000

即总是 8 列,每行包含 16 个字节。上面的第一行应该是

<?php
功能

是否有命令取消文件并打印内容?

4

3 回答 3

7

xxd与还原选项一起使用-r

xxd -p -r file.txt

给出的结果

<?php

function user_exists($un) {
        return true;
}


?>
于 2017-10-28T14:00:36.333 回答
3

使用 bash:

for block in $(cat file); do 
  [[ $block =~ (..)(..) ]] && echo -en "\x${BASH_REMATCH[1]}\x${BASH_REMATCH[2]}"
done

输出:

<?php

function user_exists($un) {
        return true;
}


?>
于 2017-10-28T14:00:13.240 回答
0
echo -e "$(sed -r 's@\s*([a-f0-9][a-f0-9])\s*@\\U\1@g' < test.txt | tr -d '\n')"

sed 正则表达式从匹配的开头和结尾捕获两个十六进制字符和零个或多个空格,并将其转换为 unicode 字符删除空格(g 是全局组合,-r 启用扩展正则表达式)。

tr 删除文件中存在的换行符

echo -e 将 unicode 转换为 ascii 字符

于 2017-10-28T18:06:07.837 回答