grep -l 输出带空格的文件名

grep -l 输出带空格的文件名

我想循环使用文件

for f in `grep -rsl "foo" . `: do sed -i -- "s/foo/bar/g" $f; done;

但由于文件名包含空格,因此只要发现空格,文件名就会被拆分。

我怎样才能将带有空格的文件名传递给do块?

答案1

为了处理复杂的文件名,最好用 NUL 字符分隔文件名。GNUgrep通过 选项支持此--null功能,并xargs通过 选项支持此-0功能。因此,请尝试:

grep --null -rslZ "foo" | xargs -0 sed -i -- "s/foo/bar/g"

使用 shell 循环

grep --null -rslZ "foo" | while IFS= read -r -d $'\0' file
    do 
        sed -i -- "s/foo/bar/g" "$file"
    done

答案2

您可以放心地忘记对带有空格的文件名进行循环。

不必要...

IFS=$'\n' && for NAV in `ps aux | egrep -o 'Google Chrome' | sort | uniq`; do
   open -a "$NAV" http://www.google.com
done

相关内容