2012-08-16 78 views
0

我試圖在find -exec操作上執行多個sed操作。我的代碼如下所示:找到-exec上的多個sed操作

find . -name '*.html.haml' -exec sed -i '' 's/restaurant_id/company_id/g' && sed -i '' 's/restaurants/companies/g' && sed -i '' 's/restaurant/company/g' && sed -i '' 's/Restaurants/Companies/g' && sed -i '' 's/Restaurant/Company/g' "{}" \; 

這似乎不起作用。我怎麼能這樣做?

錯誤:

find: -exec: no terminating ";" or "+" 

回答

2

正如其他人所說的問題是,&&被interpereted執行後find命令結束sed命令,而不是傳遞命令之一串要在每個文件執行。

實現所需結果的最簡單方法是將這些全部組合成一個帶分號的sed命令。像這樣:

$ find . -name '*.html.haml' -exec sed -i 's/restaurant_id/company_id/g;s/restaurants/companies/g;s/restaurant/company/g;s/Restaurants/Companies/g;s/Restaurant/Company/g' "{}" \; 
+0

工程就像一個魅力。在Mac OS X上,我不得不添加-i來使命令正常工作。 – Hendrik 2012-08-16 10:59:01

+0

@亨德里克。我很高興它的工作!但是,添加「我」的標誌是什麼意思? (有沒有一個?) – 2012-08-16 11:01:15

+0

因爲某些原因,你需要在Mac OS X上添加-i「」。 – Hendrik 2012-08-17 13:10:19

-1

你的shell想必拆分此命令find . -name '*.html.haml' -exec sed -i '' 's/restaurant_id/company_id/g'&&sed -i ...

嘗試引用exec命令find . -name '*.html.haml' -exec "sed -i '' 's/restaurant_id/company_id/g' && sed -i ..."

另一種方法是一個外部的sed腳本可以調用從執行單個命令

+1

引用整個exec命令將導致find將整個命令視爲可運行的可執行文件(包括所有參數),這將失敗。 – qbert220 2012-08-16 10:50:28

0

外殼將解釋&&。引用他們全部以防止這種情況'&&'

您需要爲每個sed命令添加"{}"

或者,您可以使用sed的-e選項來僅執行一次多個腳本的sed。