Замените все происшествия термина в файлах, содержавшихся в папке

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
5
22.07.2018, 03:35
3 ответа

Два способа сделать это:

энергия

Можно использовать энергию из командной строки как так:

$ vim -c "%s/nullptr/NULL/g|wq" foo.txt

Перенеситесь в для цикла:

$ for i in *; do vim -c "%s/nullptr/NULL/g|wq" -- "$i"; done

Perl

$ 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' -- *
4
27.01.2020, 20:33
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 если это не требуется.

6
27.01.2020, 20:33

С инструментами GNU:

grep -rlZ nullptr /path/to/dir |
  xargs -r0 sed -i s/nullptr/NULL/g

Избегать необходимости переписывать каждый файл.

Как всегда с sed -i, имейте в виду, что это может разорвать связи (твердый и мягкий), изменить владение и разрешение файлов и изменить разреженность и потенциально другие редкие атрибуты файлов. Также остерегайтесь этого версии GNU grep до 2.12 следуйте за символьными ссылками при убывании дерева каталогов с -r.

3
27.01.2020, 20:33

Теги

Похожие вопросы