我正在使用下面的 sed 命令,但 ifMacAddressPasswordeRegisteryValue
是WElcome12#
它的生成WElcome12
和删除#
.有什么办法可以避免吗?
sed -i "s#^mac.address.sftp.user.password=.*#mac.address.sftp.user.password=${MacAddressPasswordeRegisteryValue#*=}#" $APP_CONFIG_FILE
答案1
假设密码可能包含任何字符,则用于表达式的分隔符都sed
不能安全使用。例如,如果您有,s/.../.../
并且密码包含/
,您将再次遇到相同的问题。
因此,不要sed
在这里使用。反而,
awk -v pw="$MacAddressPasswordeRegisteryValue" \
'BEGIN { OFS=FS="=" }
$1 == "mac.address.sftp.user.password" { print $1, pw; next } 1' \
"$APP_CONFIG_FILE" >"$APP_CONFIG_FILE"-new
这将改变
mac.address.sftp.user.password=something old
进入
mac.address.sftp.user.password=hello world !#$/
鉴于那$MacAddressPasswordeRegisteryValue
是字符串hello world !#$/
。其他行将不加修改地传递到新文件"$APP_CONFIG_FILE"-new
。