将base64字符串解码为文件中的十六进制字符串并覆盖

时间:2019-01-29 07:01:45

标签: linux shell base64 hex

我在文件(file.txt)中有一个base64字符串列表,我需要将其转换为十六进制。例如,

6IwwfX8Cctn85LW+vItMhw==
wIsNfYESR9Nfueo7mg3f7Q==
A+MxnRyu6kotbKPZglQ0Fg==
Jt5jNIphpmfGoFgtgM7/Sg==
sN+Q0Xcu6JHlkqdhJlM/tw==

命令:

echo -n 6IwwfX8Cctn85LW+vItMhw== | base64 -d | od -t x1 -An

此命令可以单独工作(尽管之间有空格),但是我需要转换文件中的每个字符串,该字符串有500多行。

基本上,我希望将上述base64字符串格式解码为以下示例十六进制字符串格式:

30aa268d130fb78a4f8cb6f300e4c760

有没有一种方法可以调用文件中的每一行(例如每个 命令)并使用base64命令进行转换?任何帮助表示赞赏。

4 个答案:

答案 0 :(得分:0)

您可以为此使用Awk并使用getline()语法在文件内容上运行命令

awk '{ cmd = "printf '%s' "$1 "| base64 -d | od -t x1 -An" }
     { while ( ( cmd | getline result ) > 0 ) { gsub(/[[:space:]]+/,"",result); $0 = result }; close(cmd)  }1' file.txt

使用临时文件覆盖文件内容并移回原始文件

tmpfile=$(mktemp)
awk '{ cmd = "printf '%s' "$1 "| base64 -d | od -t x1 -An" }
     { while ( ( cmd | getline result ) > 0 ) { gsub(/[[:space:]]+/,"",result); $0 = result }; close(cmd)  }1' file.txt > "$tmpfile" && mv "$tmpfile" file.txt

答案 1 :(得分:0)

cat file.txt | while read input ; do echo -n "$input" | base64 -d | od -t x1 -An ; done

答案 2 :(得分:0)

尝试:

for b64 in $(cat e.txt); do echo "$b64" | base64 -d | od -t x1 -An | tr -d ' '; done

最后的tr -d ' '删除所有空格。

答案 3 :(得分:0)

cat file.txt | while read b64
do echo -n "$b64" | base64 -d | od -t x1 -An | sed 's/[\t ]*//g'
done