dc: '\' (0134) 未实现

dc: '\' (0134) unimplemented

我正在使用涉及 dc 的混淆技术。如果你用管道输送一条不涉及反斜杠的更小的线,你会得到这个。

root@revolt:~/Working/Bash# cat temp.text
[q]sa[ln0=aln256%Pln256/snlbx]sb806639340302927610462193083720snlbxq

root@revolt:~/Working/Bash# cat temp.text | dc
Hello world.

但是如果你尝试更大的东西,比如

root@revolt:~/Working/Bash# cat temp.text
[q]sa[ln0=aln256%Pln256/snlbx]sb331832177645759643350464573357407988278700985112761888842542077811521\
080128221484476741215560snlbxq

在线上最终出现反斜杠的地方,会发生这种情况:

root@revolt:~/Working/Bash# cat temp.text | dc
dc: '\' (0134) unimplemented
Hel���t��root@revolt:~/Working/Bash# 

但是,如果您要 运行 这个

root@revolt:~/Working/Bash# dc<<<[q]sa[ln0=aln256%Pln256/snlbx]sb331832177645759643350464573357407988278700985112761888842542077811521\
> 080128221484476741215560snlbxq
Hello world.
Hello world.
Hello world.

它工作得很好。上面的示例是键入 dc<<<,然后复制并粘贴带有反斜杠的字符串。奇怪。

我的问题是:

  1. 有没有办法sed/cut/awk/etc。删除反斜杠并放入 所有行都在一行中没有反斜杠?

  2. 有没有办法帮助 dc 解释反斜杠?

您可以使用 BASH 字符串操作来处理它:

s=$(<temp.txt)
dc <<< "${s//\[[:space:]]/}"
Hello world.
Hello world.
Hello world.

"${s//\[[:space:]]/}" 将从文件数据中删除所有 \ 后跟换行符的实例。