2012-08-16 75 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。