在Linux中使用sed替换多个文件中的字符串[重复]

sulc1iza  于 2023-08-03  发布在  Linux
关注(0)|答案(2)|浏览(117)

此问题在此处已有答案

Using different delimiters in sed commands and range addresses(3个答案)
4天前关闭。
我正在尝试用目录的子目录中的文件中的另一个字符串替换一个字符串。
下面是字符串值

old_string = gs://common/jars/sap_njdbc_2.12.jar
new_string = ${path_to_jar_file}

字符串
我已经试过了

find ./ -type f -exec sed -i 's/gs://common/jars/sap_njdbc_2.12.jar/${path_to_jar_file}/g' {} \;


我得到一个错误如下

sed: -e expression #1, char 3: unterminated `s' command


我如何获得正确的结果

mbzjlibv

mbzjlibv1#

将命令更改为如下所示。会成功的

find ./ -type f -exec sed -i 's|gs://common/jars/sap_njdbc_2.12.jar|${path_to_jar_file}|g' {} \;

字符串
因为你在你的模式中使用了/,所以它不会工作。因此,将/替换为其他一些分隔符,如|

x4shl7ld

x4shl7ld2#

有几个问题我可以从 bat 身上看到:

  • 您没有正确转义替换字符串中的正斜杠。
  • 您的${path_to_jar_file}包含在单引号中,您必须使用"双引号。

试试这个:
find ./ -type f -exec sed -i "s/gs:\/\/common\/jars\/sap_njdbc_2.12.jar/\$path_to_jar_file/g" {} \;
当然,如果你想使用文字${path_to_jar_file},因为你的问题有点不清楚。如果你觉得可行的话告诉我。

相关问题