Декодировать строки base64 в шестнадцатеричные строки в файле и перезаписать - PullRequest
0 голосов
/ 29 января 2019

У меня есть список base64 строк в файле (file.txt), который мне нужно преобразовать в шестнадцатеричный формат.Например,

6IwwfX8Cctn85LW+vItMhw==
wIsNfYESR9Nfueo7mg3f7Q==
A+MxnRyu6kotbKPZglQ0Fg==
Jt5jNIphpmfGoFgtgM7/Sg==
sN+Q0Xcu6JHlkqdhJlM/tw==

Команда:

echo -n 6IwwfX8Cctn85LW+vItMhw== | base64 -d | od -t x1 -An

Эта команда работает индивидуально (хотя промежутки между ними), но мне нужно преобразовать каждую строку в файле, который имеет более500 строк.

По сути, я хочу, чтобы вышеуказанный формат строки base64 был декодирован в приведенный ниже пример шестнадцатеричного формата:

30aa268d130fb78a4f8cb6f300e4c760

Есть ли способ, которым яМожно ли вызвать каждую строку в файле (например, для каждой команды ) и канал с командой base64 для преобразования?Любая помощь приветствуется.

Ответы [ 4 ]

0 голосов
/ 30 января 2019
cat file.txt | while read b64
do echo -n "$b64" | base64 -d | od -t x1 -An | sed 's/[\t ]*//g'
done
0 голосов
/ 29 января 2019
cat file.txt | while read input ; do echo -n "$input" | base64 -d | od -t x1 -An ; done
0 голосов
/ 29 января 2019

Попробуйте:

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

tr -d ' ' в конце удаляет все пробелы.

0 голосов
/ 29 января 2019

Вы можете использовать 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
...