在shell脚本中进行base 64解码

时间:2017-12-13 18:47:52

标签: shell string-decoding

例如,我有一个如下文件。

A,Y29tLz9hPTQ2JmM9NDQzNzgmczE9Q0,123  
B,FJNLTA2MjQyMDE3LVAmczI9ODQ3MDA,321

我想打印field1,field2(通过base 64解码),field3

输出必需::

A,result of base 64 decode,123
B,result of base 64 decode,321

2 个答案:

答案 0 :(得分:1)

您可以使用一些read命令和base64 -D命令在bash脚本中执行此操作:

#!/bin/bash

while read -r line
do
  IFS=',' read -r c1 c2 c3 <<< "$line"
  data="$(base64 -D <<< "$c2")"
  echo "$c1,$data,$c3"
done < "inputfile.txt"

你的一个base64字符串虽然有二进制数据,但由于控制字符,输出可能看起来很时髦。

A,com/?a=46&c=44378&s1=,123
���KL
  �
�,321T  �̏N

答案 1 :(得分:0)

试试这个awk单行:

awk -F',' -v OFS=',' '"echo "$2" | base64" | getline $2' file

使用您的示例进行测试:

kent$  cat f
A,Y29tLz9hPTQ2JmM9NDQzNzgmczE9Q0,123  
B,FJNLTA2MjQyMDE3LVAmczI9ODQ3MDA,321

kent$  awk -F',' -v OFS=',' '"echo "$2" | base64" | getline $2' f
A,WTI5dEx6OWhQVFEySm1NOU5EUXpOemdtY3pFOVEwCg==,123  
B,RkpOTFRBMk1qUXlNREUzTFZBbWN6STlPRFEzTURBCg==,321