【问题标题】:Decode base64 strings into hex strings in a file and overwrite将base64字符串解码为文件中的十六进制字符串并覆盖
【发布时间】:2019-01-29 07:01:45
【问题描述】:

我在一个文件 (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

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

【问题讨论】:

    标签: linux shell base64 hex


    【解决方案1】:

    试试:

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

    末尾的tr -d ' ' 删除所有空格。

    【讨论】:

      【解决方案2】:
      cat file.txt | while read input ; do echo -n "$input" | base64 -d | od -t x1 -An ; done
      

      【讨论】:

      • ...或者像 Inian 刚刚建议的那样使用 awk。我大部分时间都没有耐心弄清楚 awk 脚本。
      【解决方案3】:
      cat file.txt | while read b64
      do echo -n "$b64" | base64 -d | od -t x1 -An | sed 's/[\t ]*//g'
      done
      

      【讨论】:

        【解决方案4】:

        您可以为此使用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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-03-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-08-21
          • 1970-01-01
          相关资源
          最近更新 更多