Пример с grep:
function extract_key_value() {
egrep -o "$1[:=]['\"[:alnum:]]+" | egrep -o "['\"[:alnum:]]+$" | egrep -o "[[:alnum:]]+"
}
echo -e "on line 1\ntest:123 asasas\non line 3\ntest='abc'\non line 5" | extract_key_value test
Ваша проблема не имеет ничего общего с dm _crypt. Это простой вопрос программирования оболочки.
Во-первых, вы совершаетежестокое обращение с кошками . Вместо cat /proc/crypto | grep "name"
просто напишитеgrep name /proc/crypto
(без кавычек ).
Вы также можете объединить grep и cut в одну sed
команду. Не обязательно легче читать :sed -n '/^name/s/.*: //p' /proc/crypto
, но для этого требуется одна команда вместо двух. -n
по умолчанию запрещает sed
печатать строки. Программа находит строки, начинающиеся с «имя», и удаляет первую часть строки до пробела после двоеточия. p
гарантирует, что это будет напечатано.
Давайте теперь ответим на ваш вопрос . Я понимаю, что опция --cipher
использует один шифр. Это означает, что вы должны запускать cryptsetup benchmark
несколько раз, по одному разу для каждого шифра. Для этого требуется цикл, например:
for cipher in $(<cipher.txt)
do cryptsetup benchmark --cipher "$cipher"
done
Кавычки необходимы, так как некоторые имена шифров содержат специальные символы, такие как круглые скобки.
Если вам не нужен файл cipher.txt
, вы можете сделать все это за один раз:
for cipher in $(grep name /proc/crypto | cut -c 16-)
do cryptsetup benchmark --cipher "$cipher"
done