如何解决尝试用文件中包含反斜杠 \ 的字符串替换值
我真的可以在这里得到你的帮助。
我想做什么:
我有一个加密密码,我想写入一个属性文件。假设我将此密码存储在 $password 中,我想将其作为值写入 my.varfile 文件中名为“passKey”的密钥。
这是我目前使用的命令:sed -i "s|passKey=[^ ]*|passKey=$password|" /path/to/my.varfile
问题:
它工作得很好,直到我得到一个包含反斜杠的加密密码 \
=> 发生的事情是 sed 将反斜杠解释为转义字符,从而弄乱了密码。
例如,当我有一个像:205RjIiajQ\=\=
它在我的文件中写入为:205RjIiajQ==
我尝试了很多方法,例如在我的密码中用 \\ 替换 \ 以实际转义反斜杠,但没有成功。
关于如何做到这一点的任何想法?
我也乐于接受建议,例如尝试使用 sed 以外的任何其他方法来实现。
(请注意 - 不幸的是 :p - 我在这里使用 ksh,而不是 bash)
谢谢
解决方法
一个想法是使用 pattern substitution (see section 4.5.4) 为 \
中每次出现的 \
添加一个转义字符 ($password
)。
假设我们有以下密码:
$ password='205R\\\jIiajQ\\=\='
OP 的当前 sed
解决方案(和错误的结果):
$ sed "s|passKey=[^ ]*|passKey=${password}|" file
passKey=205R\jIiajQ\==
让我们使用参数替换将每个 \
替换为 \\
:
$ password="${password//\\/\\\\}" # we have to escape each `\` to keep it from being treated as an escape character
$ echo "${password}"
205R\\\\\\jIiajQ\\\\=\\=
OP 的 sed
解决方案与这个新的 $password
(和正确的结果):
$ sed "s|passKey=[^ ]*|passKey=${password}|" file
passKey=205R\\\jIiajQ\\=\=
这是一个ksh93 fiddle
注意:
- 一旦 OP 验证此解决方案有效,就可以根据需要将
-i
选项重新添加到sed
命令中 - 如果需要保持原来的
$password
值,可以使用一个新变量来保存“转义”字符串(例如,newpwd="${password//\\/\\\\}" ; sed "s|....|passkey=${newpwd}|" file
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。