带换行符的 sed

带换行符的 sed

我正在尝试加密密码并用这个新的加密密码替换单词“notset”。问题是 openssl 有时会创建一个包含不止一行的字符串,例如:

Salted__▒ہ▒ >▒▒1▒▒▒E
                     ǣ▒▒▒▒"e=8▒lj▒{`(̣▒e

所以,当我运行 sed 时,它失败了。

这是我正在使用的命令:

sed -i 's/PASSWORD=.*/PASSWORD='${P}'/' ${PFILE}

我收到的错误是:

sed: -e expression #1, char 49: unterminated `s' command

有人知道当它有这个线闸时我怎样才能更换整个弦?我之前尝试过使用这个:

P=`echo ${P} | tr '\n' "\\n"`

但这没有帮助。

答案1

一个变量可以不是包含任意二进制值(在大多数 shell 中)。

P通过创造这样的价值:

P=$( echo 'mysuperpassword3' | 
          openssl enc -aes-256-cbc -pbkdf2 -pass pass:'secret')

您会遇到 NUL 字节、换行符、$var扩展和许多其他问题。一种可能的解决方案是以 base64 编码形式存储值:

P=$( echo 'mysuperpassword3' | 
          openssl enc -aes-256-cbc -pbkdf2 -base64 -pass pass:'secret')

这可以避免许多问题,但仍然:应该引用变量扩展:

sed -i 's/PASSWORD=.*/PASSWORD='"${P}"'/' "${PFILE}"

相关内容