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

ako*_*man 5 linux shell base64 hex

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

6IwwfX8Cctn85LW+vItMhw==
wIsNfYESR9Nfueo7mg3f7Q==
A+MxnRyu6kotbKPZglQ0Fg==
Jt5jNIphpmfGoFgtgM7/Sg==
sN+Q0Xcu6JHlkqdhJlM/tw==
Run Code Online (Sandbox Code Playgroud)

命令:

echo -n 6IwwfX8Cctn85LW+vItMhw== | base64 -d | od -t x1 -An
Run Code Online (Sandbox Code Playgroud)

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

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

30aa268d130fb78a4f8cb6f300e4c760

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

Ini*_*ian 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
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)