1

У меня есть сценарий, над которым я сейчас работаю. И я столкнулся с проблемой, когда мне нужно предложить пользователю ввести строку, затем зашифровать ее с помощью sha-512, а затем вставить ее в определенный файл.

Пока что у меня есть:

pass= grub-crypt --sha512

Который возвращает хэшированное значение, которое мне нужно. Однако я сталкиваюсь с проблемой, когда sed будет читать специальные символы из хеша.

Я тогда попробовал:

sed -i.bak "20i$pass" /foo/bar

Но это не работает. Я предполагаю, что он все еще читает специальные символы, когда он заменяет переменную для символов в строке. Поэтому я хотел попробовать добавить escape-символ перед каждым символом в строке следующим образом:

sed 's:\(.\{1\\}\)\1:g'

Тем не менее, это не работает для меня тоже. Я новичок в седе, поэтому любое объяснение будет очень полезно. Спасибо.

1 ответ1

1

В случаях, когда специальные символы, такие как * . / $ изобилует текстом, проще всего не использовать вставку текста напрямую. Альтернатива состоит в том, чтобы добавить обратную косую черту, что является серым ручным решением.

Скорее всего использовать SED функцию r - которая считывает в следующем файле по адресу , указанному (в данном случае линии 20). Обратите внимание, что в этом коде нет обработки ошибок:

grub-crypt --sha512 > hash.tmp
sed -i.bak '20r hash.tmp /foo/bar      
rm hash.tmp  

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .