foo=$(echo "$foo" | sed 's/[\\\/]/\\&/g') # only required if $foo can contain one of \/
set +f # only required if $foo contains one of \[*?
for i in $(echo "$1" | sed -e "s/bar/$foo/"); do
echo $i
done
Два способа сделать это:
Можно использовать энергию из командной строки как так:
$ vim -c "%s/nullptr/NULL/g|wq" foo.txt
Перенеситесь в для цикла:
$ for i in *; do vim -c "%s/nullptr/NULL/g|wq" -- "$i"; done
$ perl -p -i -e 's/nullptr/NULL/g' foo.txt
Перенеситесь в для цикла:
$ for i in *; do perl -p -i -e 's/nullptr/NULL/g' -- "$i"; done
Или просто:
$ perl -p -i -e 's/nullptr/NULL/g' -- *
for file in /path/to/dir/*; do
sed -i s/nullptr/NULL/g "$file"
done
Это не влияет на подкаталоги, все же.
Редактирование 1
Более быстрое решение (с GNU):
find /path/to/dir -type f -print0 | xargs -0 sed -i s/nullptr/NULL/g
Это влияло бы на подкаталоги (и dotfiles), также. Добавить -maxdepth 1
если это не требуется.
С инструментами GNU:
grep -rlZ nullptr /path/to/dir |
xargs -r0 sed -i s/nullptr/NULL/g
Избегать необходимости переписывать каждый файл.
Как всегда с sed -i
, имейте в виду, что это может разорвать связи (твердый и мягкий), изменить владение и разрешение файлов и изменить разреженность и потенциально другие редкие атрибуты файлов. Также остерегайтесь этого версии GNU grep
до 2.12
следуйте за символьными ссылками при убывании дерева каталогов с -r
.