2014-11-17 65 views
0

我想在這裏做一個簡單的操作。這是削減從一個文件(style.css文件)幾個大字做一個找到另一個文件(client_custom.css)的100多個目錄名稱不同需要幫助在linux終端中使用sed編輯多個文件

當我使用以下命令替換

for d in */; do sed -n 73p ~/assets/*/style.css | cut -c 29-35 | xargs -I :hex: sed -i 's/!BGCOLOR!/:hex:/' ~/assets/*/client_custom.css $d; done 

它不斷給我下面的錯誤的所有目錄

sed: couldn't edit dirname/: not a regular file 

我爲什麼它給我的錯誤消息明確地給出了完整的文件路徑困惑。它沒有for loop完美的工作。

任何人都可以請幫我解決這個問題嗎?

回答

0

sed不支持將文件夾作爲輸入。

for d in */; 

將文件夾放入$d。如果您編寫sed ... $d,則BASH將把文件夾名稱放入參數sed中,並且可憐的工具將會被混淆。

而且~/assets/*/client_custom.css,因爲這將擴大到所有符合該模式這些文件。所以sed將被調用一次所有文件名稱。您可能需要爲每個文件名調用sed一次。

嘗試

for f in ~/assets/*/client_custom.css; do 
    ... | sed -i 's/!BGCOLOR!/:hex:/' $f 
done 

,或者甚至更好:

for f in ~/assets/*/client_custom.css; do 
    ... | sed 's/!BGCOLOR!/:hex:/' "${f}.in" > "${f}" 
done 

(不覆蓋輸出文件)。這樣,您可以保留「* .in」文件,使用模式編輯它們,然後使用sed「擴展」所有變量。