尝试用文件中包含反斜杠 \ 的字符串替换值
Trying to replace a value with a string containing backslash \ in a file
我真的需要你的帮助。
我想做什么 :
我有一个 encrypted 密码,我想写在 属性 文件中。假设我将此密码存储在 $password 中,我想将其作为值写入 my.varfile 文件中名为“passKey”的密钥。
这是我到目前为止使用的命令 :
sed -i "s|passKey=[^ ]*|passKey=$password|" /path/to/my.varfile
问题:
它工作得很好,直到我得到一个包含反斜杠的加密密码 \
=> 发生的事情是 sed 将反斜杠解释为转义字符,从而弄乱了密码。
例如,当我有这样的传球时:205RjIiajQ\=\=
它在我的文件中写为:205RjIiajQ==
我尝试了很多方法,比如在我的密码中用 \\ 替换 \ 以实际转义反斜杠,但没有成功。
关于如何做到这一点有什么想法吗?
我也乐于接受建议,例如尝试使用 sed 以外的任何其他方法来做到这一点。
(请注意 - 不幸的是:p - 我在这里使用 ksh,而不是 bash)
谢谢
T.
一个想法是使用 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
值,可以使用一个新变量来保存 'escaped' 字符串(例如,newpwd="${password//\/\\}" ; sed "s|....|passkey=${newpwd}|" file
)
我真的需要你的帮助。
我想做什么 :
我有一个 encrypted 密码,我想写在 属性 文件中。假设我将此密码存储在 $password 中,我想将其作为值写入 my.varfile 文件中名为“passKey”的密钥。
这是我到目前为止使用的命令 :
sed -i "s|passKey=[^ ]*|passKey=$password|" /path/to/my.varfile
问题:
它工作得很好,直到我得到一个包含反斜杠的加密密码 \
=> 发生的事情是 sed 将反斜杠解释为转义字符,从而弄乱了密码。
例如,当我有这样的传球时:205RjIiajQ\=\=
它在我的文件中写为:205RjIiajQ==
我尝试了很多方法,比如在我的密码中用 \\ 替换 \ 以实际转义反斜杠,但没有成功。
关于如何做到这一点有什么想法吗?
我也乐于接受建议,例如尝试使用 sed 以外的任何其他方法来做到这一点。
(请注意 - 不幸的是:p - 我在这里使用 ksh,而不是 bash)
谢谢
T.
一个想法是使用 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
值,可以使用一个新变量来保存 'escaped' 字符串(例如,newpwd="${password//\/\\}" ; sed "s|....|passkey=${newpwd}|" file
)