2013-06-25 35 views
3

與空間的sed目前,我有grep和文件名中

grep -irl $schema $WORKDIR/ | xargs sed -i 's/'"$schema"'/EXI1/gI' 

不與空格的文件名使用。

任何想法,如何搜索和遞歸替換所有文件?

感謝

回答

11

添加-Z(又名--null)標誌grep,和-0(也又名--null)標誌到xargs。 這將輸出NUL終止的文件名,並告訴xargs讀取NUL終止的參數。

例如。

grep -irlZ $schema $WORKDIR/ | xargs -0 sed -i 's/'"$schema"'/EXI1/gI' 
3

與SED找到應該工作:

find $WORKDIR/ -type f -exec sed -i.bak "s/$schema/EXI1/gI" '{}' + 

OR

find $WORKDIR/ -type f -print0 | xargs -0 sed -i.bak "s/$schema/EXI1/gI" 
+1

該解決方案更好,因爲它不會搜索每個文件兩次(一次使用grep,一次使用sed)。這應該選擇其他。 – aec

+1

上面的命令不像grep那樣搜索文件的內容,它只是查找WORKDIR中的所有文件。我的命令使用grep來查找包含$ schema的文件並將文件傳遞給sed來執行替換,這樣只有包含$ schema的文件纔會被觸及。而查找所有文件都被觸動 – rojanu

+0

您並不需要使用grep進行搜索,因爲使用sed您無論如何都要進行搜索和替換。 – anubhava