目前,我有
grep -irl $schema $WORKDIR/ | xargs sed -i 's/'"$schema"'/EXI1/gI'
不适用于带空格的文件名。
任何想法,如何递归搜索和替换所有文件?
由于
答案 0 :(得分:11)
将-Z
(又名--null
)标记添加到grep
,将-0
(也称为--null
)标记添加到xargs
。
这将输出NUL终止的文件名,并告诉xargs
读取NUL终止的参数。
例如
grep -irlZ $schema $WORKDIR/ | xargs -0 sed -i 's/'"$schema"'/EXI1/gI'
答案 1 :(得分: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"