Usando o grep
Por que você não pode simplesmente usar a opção -r
para grep
para recrutar o sistema de arquivos em vez de usar find
? Existem 2 switches adicionais que eu usaria também, em vez da opção -n
.
$ grep -rHn PATTERN <DIR> | cut -d":" -f1-2
Exemplo # 1
$ grep -rHn PATH ~/.bashrc | cut -d":" -f1-2
/home/saml/.bashrc:25
Detalhes
-
-r
- busca recursivamente por arquivos + diretórios -
-H
- imprime o nome do arquivo se ele corresponder (menos restritivo que-l
), ou seja, funciona com outros switches degrep
-
-n
- exibe o número da linha da partida
Exemplo # 2
$ grep -rHn PATH ~/.bash* | cut -d":" -f1-2
/home/saml/.bash_profile:10
/home/saml/.bash_profile:12
/home/saml/.bash_profile_askapache:99
/home/saml/.bash_profile_askapache:101
/home/saml/.bash_profile_askapache:118
/home/saml/.bash_profile_askapache:166
/home/saml/.bash_profile_askapache:218
/home/saml/.bash_profile_askapache:250
/home/saml/.bash_profile_askapache:314
/home/saml/.bash_profile_askapache:2317
/home/saml/.bash_profile_askapache:2323
/home/saml/.bashrc:25
Usando o find
$ find . -exec sh -c 'grep -Hn PATTERN "$@" | cut -d":" -f1-2' {} +
Exemplo
$ find ~/.bash* -exec sh -c 'grep -Hn PATH "$@" | cut -d":" -f1-2' {} +
/home/saml/.bash_profile:10
/home/saml/.bash_profile:12
/home/saml/.bash_profile_askapache:99
/home/saml/.bash_profile_askapache:101
/home/saml/.bash_profile_askapache:118
/home/saml/.bash_profile_askapache:166
/home/saml/.bash_profile_askapache:218
/home/saml/.bash_profile_askapache:250
/home/saml/.bash_profile_askapache:314
/home/saml/.bash_profile_askapache:2317
/home/saml/.bash_profile_askapache:2323
/home/saml/.bashrc:25
Se você realmente quiser usar find
, você pode fazer algo assim para exec grep
ao localizar os arquivos usando find
.