sed 命令删除 #

sed 命令删除 #

我正在使用下面的 sed 命令,但 ifMacAddressPasswordeRegisteryValueWElcome12#它的生成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

相关内容