sed 替换字符串时出错

sed 替换字符串时出错

您好,我需要替换字符串,但我使用字符串“return false;”收到错误

#!bin/bash
oldstring='{alert("bash")}'
newstring='{return false;}'
grep -rl $oldstring /home/commons.bundle.js | xargs sed -i s/$oldstring/$newstring/g

错误:sh deleteBoo.sh sed:espressione -e #1,carattere 25:comando `s' 非终止符

答案1

grep -rlZF -- "$oldstring" /home/commons.bundle.js |
xargs -r0 sed -i "s/$oldstring/$newstring/g" -- 

以下的小改动应该可以使其正常工作:

  • grep 应该使用-F,以便 grep 不会将传递的字符串评估为正则表达式。
  • 另一个使用的 grep 选项是-Z使用空分隔符将文件名传递到 xargs。
  • 在接收端, xargs with-0现在将安全地解压文件名。根据“法律”,文件名中不能出现空值

相关内容