search - texto - grep varios patrones
¿Puedes editar en masa todos los archivos devueltos en un grep? (6)
¡Puedes hacerlo sin ningún procesamiento de la salida grep! Esto incluso te permitirá ir a la línea derecha (usando :help quickfix
comandos :help quickfix
, ej :cn
o :cw
). Entonces, si estás usando bash o zsh:
vim -q <(grep foo *.c)
Quiero editar en masa una tonelada de archivos que se devuelven en un grep. (Lo sé, debería mejorar en sed).
Entonces si lo hago:
grep -rnI ''xg_icon-*''
¿Cómo puedo canalizar todos esos archivos en vi?
La forma más fácil es hacer que grep devuelva solo los nombres de archivo ( -l
lugar de -n
) que coinciden con el patrón. Ejecuta eso en una subshell y envía los resultados a Vim.
vim $(grep -rIl ''xg_icon-*'' *)
Una buena solución general para esto es usar xargs para convertir un stdout de un proceso como grep en una lista de argumentos.
A la:
grep -rIl ''xg_icon-*'' | xargs vi
si lo que desea editar es similar en todos los archivos, entonces no tiene sentido usar vi para hacerlo manualmente. (aunque vi también puede tener secuencias de comandos), hipotéticamente, se ve algo así, ya que nunca mencionas lo que quieres editar
grep -rnI ''xg_icon-*'' | while read FILE
do
sed -i.bak ''s/old/new/g'' $FILE # (or other editing commands, eg awk... )
done
si usa vim y la opción -p, abrirá cada archivo en una pestaña, y podrá alternar entre ellos usando gt o gT, o incluso el mouse si tiene soporte para el mouse en la terminal
vi `grep -l -i findthisword *`