2015-06-14 81 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