![grep -l 输出带空格的文件名](https://linux22.com/image/1448019/grep%20-l%20%E8%BE%93%E5%87%BA%E5%B8%A6%E7%A9%BA%E6%A0%BC%E7%9A%84%E6%96%87%E4%BB%B6%E5%90%8D.png)
我想循环使用文件
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