4

Я хочу зациклить файлы с

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

Но так как имена файлов содержат пробелы, имя файла разделяется при каждом обнаружении пробела.

Как передать имя файла с пробелами в блок do ?

2 ответа2

4

Для работы со сложными именами файлов лучше всего разделять имена файлов символами 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
0

Вы можете смело забыть о for для зацикливания имен файлов с пробелами.

Не обязательно...

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .