Подтвердить что ты не робот

Можете ли вы массово редактировать все файлы, возвращенные в grep?

Я хочу массово редактировать тонну файлов, которые возвращаются в grep. (Я знаю, мне лучше поправиться).

Итак, если я делаю:

grep -rnI 'xg_icon-*'

Как мне передать все эти файлы в vi?

4b9b3361

Ответ 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 &lt(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

Ответ 6

vi `grep -l -i findthisword *`