2013-12-10 272 views
3

給出兩個sed的例子。{} 是什麼意思? in find -exec sed

sed -i 's/ugly/beautiful/g' /home/bruno/old-friends/sue.txt 

這對我來說很容易理解。

但這:

$ find /home/bruno/old-friends -type f -exec sed -i 's/ugly/beautiful/g' {} \; 

爲什麼在第二個{} \;重要?這有什麼意義和意義? 我假設`;'是用於-exec。但爲什麼它應該逃脫,大括號是什麼意思?他們可以被想象爲類似於C函數的範圍嗎?

回答

7

這實際上不是sed,而是find。該行告訴find查找匹配的文件,並在找到它們時執行sed{}是文件名將在sed命令行上的位置,而\;則表示sed命令行的末尾。 (理論上,你可以再繼續與其他find行動;若sed返回0他們只會發生。)

所以,如果find找到該文件/home/foo/barsed命令行會

sed -i 's/ugly/beautiful/g' /home/foo/bar
+0

感謝和你知道我們逃跑的原因';'? {}用於文件名替換的有趣選擇。 –

+2

@ SenthilKumaran:我們必須逃避';',因爲在大多數shell中,'''用於分隔命令。 (例如,在你的shell中嘗試'echo「a」; echo「b」')。因此,如果我們不逃避它,它不會成爲'find'的參數,那將是該命令的結尾和下一個的開始,在殼層。 –

+0

謝謝!我沒有想到殼的需要。現在有道理。 –