Existem várias maneiras de fazer isso (usando o comando find / exec, xargs, ...), uma delas pode ser:
grep -li "type" * | while read file; do echo "processing $file"; done
Como posso enviar arquivos do grep para abrir todos os arquivos correspondentes?
Eu tentei grep -li "type" * | open
, mas isso não funciona.
IFS=$'\n'; for i in $(grep -rli "type" *); do open "$i"; done
O IFS é necessário para não dividir nomes de arquivos contendo espaços em branco.
Use enquanto lê loop de linha:
| while read line
Se
$ grep -l something *.py
file1.py
file2.py
Então
$ grep -l something *.py | while read line ; do open "$line" ; done
é equivalente a
$ open "file1.py"
$ open "file2.py"
Usar aspas como "$line"
em vez de apenas $line
permite que ele corresponda a nomes de arquivos que contenham espaços, caso contrário, nomes de arquivos com espaços causarão erros.
Observe que line
é apenas um nome comumente usado para uma variável nesse uso. Poderia facilmente ser
$ grep -l something *.py | while read potato ; do open "$potato" ; done
Tags command-line grep pipe