提问者:小点点

grep 和 sed 在文件名中带有空格


目前,我有

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

这不适用于带空格的文件名。

有什么想法,如何递归搜索和替换所有文件?

谢谢


共2个答案

匿名用户

-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" '{}' +

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