sed在文件夹的所有文件中用包含破折号的字符串替换字符串

时间:2014-05-28 00:31:16

标签: regex bash sed

在fodler中的所有文件中,我正在尝试替换该类型的所有字符串:

load(alpha)

load(alpha, lib="lib=~/project-a/alpha")

使用sed我试过:

find . -type f -print0 | xargs -0 sed -i 's/load(alpha)/load(alpha, lib="lib=~/project-a/alpha")/g'

但我收到错误: sed:-e表达式#1,char 39:`s'

的未知选项

知道我错过了什么吗? 谢谢!

2 个答案:

答案 0 :(得分:1)

您收到该错误,因为带有substitute命令的/分隔符与您替换中的目录分隔符冲突;遇到第一个目录分隔符后,sed认为替换已中止。将分隔符更改为其他内容以获得更清晰的命令。

sed -i 's!load(alpha)!load(alpha, lib="lib=~/project-a/alpha")!g'

答案 1 :(得分:0)

find . -type f -print0 | xargs -0 sed -i 's/load(alpha)/load(alpha, lib="lib=~\/project-a\/alpha")/g'

在您的命令中,字符/是分隔符,因此您需要转义属于数据的任何正斜杠,如/project-a/alpha - > \/project-a\/alpha

或者,您可以使用不同的分隔符(在本例中为#字符)

find . -type f -print0 | xargs -0 sed -i 's#load(alpha)#load(alpha, lib="lib=~/project-a/alpha")#g'