我想循环使用文件
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