декодировать Base64 из оболочки


Помогите,если возможно, пожалуйста. Я хочу восстановить файл попробовать.txt

Попробуй.txt содержит:

uid: random1
sn: 8

uid: random2
sn:: SGVsbG8sIFdvcmxkIQo=

К этому:

random1 8
random2 Hello, World!

Проблема в Base64. Каков наилучший и возможный способ его расшифровки?

1) Ищите, хотя и старайтесь.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

Некоторый код для поиск через $ОЯТ для различных base64 закодированный текст не могли бы вы помочь с этим? 2а)
кошке попробовать.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 '{print} '

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

3 ответа:

Этот однострочник может дать то, что вы хотите:

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!

Попробуйте это:

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

В вашем кулачном варианте:

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

Используйте substr(index($0, $2)) вместо $2.

Вам также понадобится "else" для несоответствующих строк.