首页 > 解决方案 > 如果文件替换包含反斜杠,则查找并替换给出错误

问题描述

我有一个文件,我必须在其中找到String并替换它。当我使用 sed 时它给了我错误,因为替换字符串包含“/”。

replace_string=6W4kngjd3c7oOShnG7iWYQpZVzr4S88G20fujmP7cdM1m5Gw550WfMD38DA4g6O4qxUIJJwt2OtLTRmh7vWz+AWQVmIMajk3OylEfR/X+afrD6YOeGLYHU6Ef4DYv/3x

sed -i -e 's|string|'$replace_string'|g' $FILEPATH

这是它给出的错误 - sed: -e expression #1, char 38: unterminated `s' command

除了 sed 或我可以使用 sed 的任何其他方式之外,还有其他方法吗?

标签: awksedsh

解决方案


sed 不理解文字字符串(请参阅Is it possible to escape regex metacharacters with sed 可靠),只有不包含您使用的任何分隔符的正则表达式和启用反向引用的替换。如果您想替换字符串,请使用能够理解字符串的工具,例如 awk,例如,这适用于字符串中的任何字符(代码需要调整以处理old单行内的换行符或多个替换):

old='string1' new='string2' awk '
BEGIN {
    old = ENVIRON["old"]
    new = ENVIRON["new"]
    lgth = length(old)
}
s = index($0,old) { $0 = substr($0,1,s-1) new substr($0,s+lgth) }
{ print }
' file

推荐阅读