我目前正在编写一个脚本。我遇到了一个问题,我需要提示用户输入一个字符串,然后使用 sha-512 加密该字符串,然后将其插入到特定文件中
到目前为止我已经:
pass= grub-crypt --sha512
它返回我需要的哈希值。但是,我遇到了 sed 会从哈希中读取特殊字符的问题。
然后我尝试:
sed -i.bak "20i$pass" /foo/bar
但那行不通。我猜想当它用变量替换字符串中的字符时,它仍然在读取特殊字符。所以我想尝试在字符串中的每个字符前添加一个转义字符,如下所示:
sed 's:\(.\{1\\}\)\1:g'
但是,这对我来说也不起作用。我是 sed 新手,所以任何解释都会很有帮助。谢谢。
答案1
如果* . / $
文本中含有大量特殊字符,最简单的方法是不要直接插入文本。另一种方法是添加反斜杠,但这是一种乏味的手动解决方案。
最好使用r
sed 函数 - 它会在指定的地址(本例中为第 20 行)读取以下文件。请注意,此代码中没有错误处理:
grub-crypt --sha512 > hash.tmp
sed -i.bak '20r hash.tmp /foo/bar
rm hash.tmp