Комментарии 9
Недопонял, зачем это здесь, и кому это можно понадобиться, ну да ладно.
Зачем-то ваш скрипт поправил. Мне кажется, стало немного читабельнее.
Небольшие пояснения.
Пожалуй, вместо
Зачем-то ваш скрипт поправил. Мне кажется, стало немного читабельнее.
Скрытый текст
#!/bin/bash
path=./
temp=$path/temp
key_files="name.key masks.key masks2.key primary.key primary2.key header.key"
original_file="$temp/$1"
mkdir -p "$temp"
mkdir -p "$path/keys"
# CR to LF. Конвертируем файл в формат UNIX (Окончания строк LF, вместо CR)
dos2unix -n -q "$1" "$original_file"
# Записываем имена всех ключей во временный файл
grep -E -o 'Keys\\\w+]' "$original_file" | sed -E 's/Keys\\//; s/]//' > $temp/keysname
while read key
do
# Записываем полное содержимое ключа в отдельный файл с его именем
cat $original_file | sed -e '/./{H;$!d;}' -e "x;/$key]/!d" | sed -n "/$key]/!p" > $temp/$key
# Разделяем ключи (name, primary, masks, header...) и записываем в отдельные файлы в папку с именем ключа
mkdir -p "$path/keys/$key"
for file in $key_files;
do
hex=$(cat $temp/$key | tr -d '\n' | sed -E 's/\\//g; s/ //g; s/\$//g' | grep -E -o "$file\"=hex:(\w{2},?)+?" | sed -E "s/$file\"=hex://; s/,//g" | sed -E 's/\w{2}/\\x&/g')
echo -e -n "$hex" > "$path/keys/$key/$file"
# LF to CR ???
# sed 's/$'"/`echo \\\r`/" "$path/keys/$file" > "$path/keys/$file"
done
done < $temp/keysname
# Очистка временных файлов
rm -rf "$temp"
exit 0
Небольшие пояснения.
- Не нужно проверять, существует ли директория, если вам нужно её создать —
mkdir -p
создаст её со всеми поддиректориями и не будет ныть, если всё уже создано. - Не нужно и проверять, если вам её нужно удалить —
rm -rf
не ругается, если ему ничего не дали. - Для итерации по списку файлов сойдёт и просто строка, ассоциативный массив на мой взгляд излишен. Да и синтаксис у него страшнее.
- Зачастую можно обойтись без
cat
, многие утилиты могут принимать на вход файлы (в этом скрипте осталась ещё пара таких мест)
Пожалуй, вместо
sed
можно бы использовать скрипт на python или ещё чем-нибудь более человечном.За ликбез и поправки спасибо +1. Скрипты пишу не часто и конструкции получаются не очень красивые порой.
Глупые и ненужные проверки тянутся еще из далекого прошлого, со времен borland pascal наверное.))
Глупые и ненужные проверки тянутся еще из далекого прошлого, со времен borland pascal наверное.))
sed, кстати тоже может принимать данные из файла, без cat. Забыл про это.
sed 'бла бла бла' <file
sed 'бла бла бла' <file
Это не имеет никакого отношения к sed. Перенаправление ввода/вывода — возможности оболочки. Sed будет просто использовать stdin, не увидев никакой разницы между < и cat (хотя она, вообще‐то, есть: в случае с cat stdin будет подключен к pipe, в который cat закачивает данные, а в случае с < stdin будет связан с файлом: разница не только в наличии лишних действий со стороны cat, но и в том, что файл, к примеру, поддерживает fseek/ftell, а pipe — нет).
Полезно, но в вышеуказанном примере абсолютно «монопинисуально» — т.е. без разницы. )))
Я не старался сделать чистый и оптимальный код с оптимальным быстродействием и «защитой от дурака». Ну да, может и некрасиво и не очень быстро, но работает. Работает, кстати, медленно — на моем i3 где то около секунды парсил 15 ключей.
Я не старался сделать чистый и оптимальный код с оптимальным быстродействием и «защитой от дурака». Ну да, может и некрасиво и не очень быстро, но работает. Работает, кстати, медленно — на моем i3 где то около секунды парсил 15 ключей.
Я тоже обычно пишу
cat file | sed
, потому что так удобнее менять sed на что‐то ещё. Но вообще о том, как нужно писать — sed command file
(только здесь sed будет открывать файл сам, а не пользоваться stdin), sed command <file
, cat file | sed command
или даже <file | sed command
(zsh) — периодически разгораются жаркие споры. В том числе видел такое и на habrahabr.ru.Честно говоря, никогда не лез в такие тонкости. Возможно впоследствии, когда нужна будет мегасупероптимизация по универсальности и быстродействию — вкурю и это. В любом случае, спасибо за ликбез.
Если нужна мегасупероптимизация, то проще переписать с использованием чего‐то вроде Python+PyPy. А такие споры — погоня, как правило, за долями процентов (если только вы не догадались действительно написать
<file | sed command
с достаточно большим файлом — zsh почему‐то на порядок медленнее cat в данном вопросе).Если мне память не изменяет, то можно делать все самим КриптоПро. Копируем закрытый ключ с реестра на флеху через панель управления. И получаем эти файлы на флехе.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Конвертация электронных ключей ASCII в hex