Как декодировать Текст base64 в файле ldif в Linux?

У меня почти такая же проблема с (старым) bash 4.2.37, а не с bash 4.3 или 4.4.
То есть: расширение работает с ls , но не с cd .


Однако в качестве вспомогательной привязки клавиш я определил (из e S pand):

Ctrl - s в моем ~ / .inputrc :

Control-s: shell-expand-line

Это позволяет мне набрать: cd $ SOME_DIR , а затем Ctrl - s , чтобы расширить переменную до:

cd /path/to/some/dir

A Не менее полезное сочетание клавиш (из G лоббирование):

Ctrl - g также в моем ~ / .inputrc :

Control-g: glob-expand-word

Это позволяет мне набрать ls b * , а затем Ctrl - g , чтобы развернуть b * :

$ ls b*<kbd>Ctrl</kbd>-<kbd>s</kbd>
$ ls bash.html_node.tar.gz bash.pdf

Что также позволяет мне, чтобы редактировать командную строку и добавлять или удалять элементы по мере необходимости.

0
30.08.2018, 04:05
1 ответ

Я нашел способ сделать это:

sed -r 's/(.*:)(: )([[:graph:]]+)/echo "\1 `echo -n '\\3' |base64 -d`"/ge' "$FILE_JOINED"

И если вы хотите сложить длинные строки, (на основе этого ответа)

sed -r 's/(.*:)(: )([[:graph:]]+)/echo "\1 `echo -n '\\3' |base64 -d`"/ge' "$FILE_JOINED" | \
awk -v WIDTH=76 '
{
    space="";
    while (length>WIDTH) {
        print substr($0,1,WIDTH);
        space=" ";
        $0=space substr($0,WIDTH+1);
    }
    print;
}
'

Если кому надо, вот весь скрипт.

[Обратите внимание, что команда скрипта AWK оставляет в покое закомментированные строки (строки, начинающиеся с " #" ), которые не включены в предыдущую]:

#!/bin/bash

FILE=$1

DIR=`dirname $FILE`
pushd $DIR

WIDTH=76

FILE=`basename $FILE`
FILE_JOINED="`basename $FILE.ldif`-una-linea.ldif"
FILE_DECODED="`basename $FILE.ldif`-decodificado.ldif"

echo
echo DIR: $DIR
echo FILE: $FILE
echo FILE_JOINED: $FILE_JOINED
echo FILE_DECODED: $FILE_DECODED

sed -n 'H; ${ x; s/\n//; s/\n //g; p}' "$FILE" > "$FILE_JOINED"

sed -r 's/(.*:)(: )([[:graph:]]+)/echo "\1 `echo -n '\\3' |base64 -d`"/ge' "$FILE_JOINED" | \
awk -v WIDTH=$WIDTH -v space=" " '
/^[^#]/ {
    while (length>WIDTH) {
        print substr($0,1,WIDTH);
        $0=space substr($0,WIDTH+1);
    }
    print;
}
/^[#]|^$/ {
    print;
}
' > $FILE_DECODED

rm $FILE_JOINED

ОБНОВЛЕНИЕ 20180830

Произошла ошибка расширения оболочки. Это не сохранение символов «*», а замена их списком файлов.

Исправление заключалось в добавлении двойных кавычек в первую команду echo. Я уже исправил показанные ранее команды и скрипт.

Команда ОШИБОЧНАЯ была:

sed -r 's/(.*:)(: )([[:graph:]]+)/echo \1 `echo -n '\\3' |base64 -d`/ge' "$FILE_JOINED"

ОБНОВЛЕНИЕ 20180830 -б

Команда AWK также изменяла комментарии, чего не должно было быть.

Команда ПРЕДЫДУЩАЯ была:

awk -v WIDTH=$WIDTH '
BEGIN {
    space=" ";
}
{
    while (length>WIDTH) {
        print substr($0,1,WIDTH);
        $0=space substr($0,WIDTH+1);
    }
    print;
}
' > $FILE_DECODED
0
28.04.2021, 23:42

Теги

Похожие вопросы