Use grep para encontrar arquivos e pipe / open para abri-los

1

Como posso enviar arquivos do grep para abrir todos os arquivos correspondentes?

Eu tentei grep -li "type" * | open , mas isso não funciona.

    
por Mica 03.06.2014 / 22:19

3 respostas

0

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
    
por 03.06.2014 / 22:28
1
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.

    
por 24.06.2014 / 12:59
1

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
    
por 21.09.2015 / 17:13