Я хочу зациклить файлы с
for f in `grep -rsl "foo" . `: do sed -i -- "s/foo/bar/g" $f; done;
Но так как имена файлов содержат пробелы, имя файла разделяется при каждом обнаружении пробела.
Как передать имя файла с пробелами в блок do
?
Для работы со сложными именами файлов лучше всего разделять имена файлов символами NUL. GNU grep
поддерживает это с параметром --null
а xargs
поддерживает это с параметром -0
. Таким образом, попробуйте:
grep --null -rslZ "foo" | xargs -0 sed -i -- "s/foo/bar/g"
grep --null -rslZ "foo" | while IFS= read -r -d $'\0' file
do
sed -i -- "s/foo/bar/g" "$file"
done
Вы можете смело забыть о for для зацикливания имен файлов с пробелами.
Не обязательно...
IFS=$'\n' && for NAV in `ps aux | egrep -o 'Google Chrome' | sort | uniq`; do
open -a "$NAV" http://www.google.com
done