Linux下使用sed批量替换子目录文件字符串报错的解决方法
问题解决:批量替换目录下文件中的指定字符串
报错原因
你用/作为sed替换命令的分隔符,但目标字符串gs://common/jars/sap_njdbc_2.12.jar本身包含多个/,sed会把第一个/后的内容误判为命令的一部分,导致s命令格式不完整,触发“unterminated `s' command”错误。
正确命令
核心思路是更换sed的分隔符,选择目标字符串中不存在的字符(比如#、@),同时用双引号包裹命令以解析环境变量:
Linux 环境
find ./ -type f -exec sed -i "s#gs://common/jars/sap_njdbc_2.12.jar#${path_to_jar_file}#g" {} \;
macOS 环境(sed语法略有差异)
find ./ -type f -exec sed -i '' "s#gs://common/jars/sap_njdbc_2.12.jar#${path_to_jar_file}#g" {} \;
额外说明
- 如果需要保留原文件备份,可以在
-i后添加备份后缀,比如-i.bak,执行后会生成带.bak后缀的原文件副本 - 若
${path_to_jar_file}变量中包含特殊字符(如&、\),需要提前对这些字符进行转义,避免sed解析错误
内容的提问来源于stack exchange,提问作者nmr
相关产品推荐
相关产品推荐

