Bash/Sed 如何将带有特殊字符的字符串插入到文件中

Bash/Sed 如何将带有特殊字符的字符串插入到文件中

我目前正在编写一个脚本。我遇到了一个问题,我需要提示用户输入一个字符串,然后使用 sha-512 加密该字符串,然后将其插入到特定文件中

到目前为止我已经:

pass= grub-crypt --sha512

它返回我需要的哈希值。但是,我遇到了 sed 会从哈希中读取特殊字符的问题。

然后我尝试:

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

但那行不通。我猜想当它用变量替换字符串中的字符时,它仍然在读取特殊字符。所以我想尝试在字符串中的每个字符前添加一个转义字符,如下所示:

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

但是,这对我来说也不起作用。我是 sed 新手,所以任何解释都会很有帮助。谢谢。

答案1

如果* . / $文本中含有大量特殊字符,最简单的方法是不要直接插入文本。另一种方法是添加反斜杠,但这是一种乏味的手动解决方案。

最好使用rsed 函数 - 它会在指定的地址(本例中为第 20 行)读取以下文件。请注意,此代码中没有错误处理:

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

相关内容