【问题标题】:decode Base64 from shell从外壳解码 Base64
【发布时间】:2013-12-07 05:14:34
【问题描述】:

如果可能,请提供帮助。 我想重构文件try.txt

try.txt 包含:

uid: random1
sn: 8

uid: random2
sn:: SGVsbG8sIFdvcmxkIQo=

到这里:

random1 8
random2 Hello, World!

问题出在 Base64 中。解码它的最佳和可能的方法是什么?

1) 通过 try.txt 逐行搜索并在匹配的字符串上解码 这可能与 awk 有关还是这是一厢情愿? 这不起作用 -> cat try.txt | awk '{if ($1 == "sn::") base64 -d $2'

2) 逐行搜索 sn.txt 并解码匹配的字符串

path=/dev/shm
uidf=$path/uid.txt
snf=$path/sn.txt
ff=$path/ff.txt

通过 $snf 搜索不同 Base64 编码文本的一些代码 你能帮忙吗? 2a)
猫尝试.txt | grep -v dn:| awk '/uid/ {print $2}' > $uidf 猫尝试.txt | grep -v dn:| awk '/sn/ {print $2}' > $snf

这里有一些代码来搜索base64编码的字符串并对其进行解码

paste $uidf $snf | awk '{print $1,$2}' > $ff

2b) 猫尝试.txt | grep -v dn:| awk '{打印}'

case "$string" in
    "sn::" ) base64 -d $string;;
esac

【问题讨论】:

    标签: bash shell awk base64 decode


    【解决方案1】:

    这个单线可以给你想要的:

    awk -v RS="" '$3=="sn::"{"base64 -d<<< \""$4"\""|getline $4}{print $2,$4}' file
    

    在上面的命令中,getline 用于从外部 cmd (base64) 获取输出。

    用你的文件测试:

    kent$  cat f
    uid: random1
    sn: 8
    
    uid: random2
    sn:: SGVsbG8sIFdvcmxkIQo=
    
    kent$  awk -v RS="" '$3=="sn::"{"base64 -d<<< \""$4"\""|getline $4}{print $2,$4}' f
    random1 8
    random2 Hello, World!
    

    【讨论】:

    • 您好,感谢您的帮助。但它不起作用。输出:random1 8 sh: 1: Syntax error: redirection unexpected random2 SGVsbG8sIFdvcmxkIQo=
    • @user2707431 你复制了我的命令和你的示例文件?
    • 我做了、复制、写了它,但它不起作用。我发现ubuntu默认使用破折号,但即使从bash调用也不起作用,可能只是ubuntu问题=(或者bash有一些扩展?
    • @user2707431 我不知道 ubuntu。我在 zsh 和 bash 下测试了该行,工作正常。您将问题标记为 bash,然后不要用破折号对其进行测试。顺便说一句,更好地使用gnu awk (gawk)
    • @user2707431 我不认为这是发行版问题。我正在使用archlinux。您的文件内容完全与您的问题中的内容是否相同? try.txt 也请报告您的 awk 版本
    【解决方案2】:

    试试这个:

    awk '/^uid: /{printf $2" "}/^sn: /{print $2}/^sn:: /{print $2|"base64 --decode"}'
    

    【讨论】:

      【解决方案3】:

      在你的拳头变体中:

      cat try.txt | awk '{if ($1 == "sn::") base64 -d $2'
      

      使用substr(index($0, $2)) 而不是$2

      对于不匹配的行,您还需要一个“else”。

      【讨论】:

      • 这个答案完全没有意义。
      • 您对 substr() 部分是正确的,但我试图指出他没有涵盖不匹配行的情况。这是我的第二个镜头:cat 文件 | awk '{if ($1 == "sn::") {system("echo " $2 "| base64 -d")} else print $0}' > output.txt
      • @user3012345 您从 Base64 转换的方法也很有效。谢谢大家。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-14
      • 2015-11-16
      • 1970-01-01
      • 1970-01-01
      • 2018-12-19
      • 1970-01-01
      相关资源
      最近更新 更多