Можете ли вы массово редактировать все файлы, возвращенные в grep?
Я хочу массово редактировать тонну файлов, которые возвращаются в grep. (Я знаю, мне лучше поправиться).
Итак, если я делаю:
grep -rnI 'xg_icon-*'
Как мне передать все эти файлы в vi?
Ответ 1
Самый простой способ - вернуть grep только имена файлов (-l вместо -n), которые соответствуют шаблону. Запустите это в подоболочке и подайте результаты на Vim.
vim $(grep -rIl 'xg_icon-*' *)
Ответ 2
Хорошим общим решением для этого является использование xargs для преобразования stdout из процесса, такого как grep, в список аргументов.
A la:
grep -rIl 'xg_icon-*' | xargs vi
Ответ 3
если вы используете vim и -p, он откроет каждый файл на вкладке, и вы можете переключаться между ними с помощью gt или gT или даже с мышью, если у вас есть поддержка мыши в терминале
Ответ 4
Вы можете сделать это без обработки вывода grep! Это даже позволит вам перейти к правильной строке (используя команды :help quickfix, например. :cn или :cw). Итак, если вы используете bash или zsh:
vim -q <(grep foo *.c)
Ответ 5
если то, что вы хотите отредактировать, похоже на все файлы, а затем без использования vi для этого вручную. (хотя vi также может быть написано сценарием), гипотетически, он выглядит примерно так, поскольку вы никогда не упоминаете, что хотите редактировать
grep -rnI 'xg_icon-*' | while read FILE
do
sed -i.bak 's/old/new/g' $FILE # (or other editing commands, eg awk... )
done