3
與空間的sed目前,我有grep和文件名中
grep -irl $schema $WORKDIR/ | xargs sed -i 's/'"$schema"'/EXI1/gI'
不與空格的文件名使用。
任何想法,如何搜索和遞歸替換所有文件?
感謝
與空間的sed目前,我有grep和文件名中
grep -irl $schema $WORKDIR/ | xargs sed -i 's/'"$schema"'/EXI1/gI'
不與空格的文件名使用。
任何想法,如何搜索和遞歸替換所有文件?
感謝
添加-Z
(又名--null
)標誌grep
,和-0
(也又名--null
)標誌到xargs
。 這將輸出NUL終止的文件名,並告訴xargs
讀取NUL終止的參數。
例如。
grep -irlZ $schema $WORKDIR/ | xargs -0 sed -i 's/'"$schema"'/EXI1/gI'
與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"
該解決方案更好,因爲它不會搜索每個文件兩次(一次使用grep,一次使用sed)。這應該選擇其他。 – aec
上面的命令不像grep那樣搜索文件的內容,它只是查找WORKDIR中的所有文件。我的命令使用grep來查找包含$ schema的文件並將文件傳遞給sed來執行替換,這樣只有包含$ schema的文件纔會被觸及。而查找所有文件都被觸動 – rojanu
您並不需要使用grep進行搜索,因爲使用sed您無論如何都要進行搜索和替換。 – anubhava