2015-06-14 51 views
0

这是一个相当简单的问题,我敢肯定这里的专家可以马上解决它,但是我似乎无法使其工作(可能是一些报价问题用Sed替换BASH中的字符串(当它有特殊字符时)

我想放置的所有实例:

`which cat` 

下列要求:

/bin/cat 

我运行下面的命令:

for file in $(find . -iname 'PATCH*'); do sed 's/\`which cat\`/\'\/bin\/cat/g' $file; done 

我相信我已经逃脱了所有不需要被视为特殊字符的字符,但它似乎并没有做到这一点。

请帮忙:)

+1

我不知道为什么单引号来之前'/ bin' –

+0

好斑点。非常感谢:) – Neekoy

回答

2

一般不遍历的find输出,因为文件名可以包含$IFS这将打破循环是个好主意。使用-exec选项find代替:

find -iname 'PATCH*' -exec sed -i 's#`which cat`#/bin/cat#g' {} \; 
+0

工程就像一个魅力,谢谢你的建议和我可以用#s划分的信息。欢呼:) – Neekoy

+1

不客气! – hek2mgl

1

使用不同的sed分隔符。

sed 's~`which cat`~/bin/cat~g' file 

例子:

$ echo '`which cat`' | sed 's~`which cat`~/bin/cat~g' 
/bin/cat 
+0

作品像一个不同的分隔符的魅力。我以前不知道他们。非常感谢:) – Neekoy