Use simplesmente isto:
grep -r "text" | grep -i -v ^sys/
Você pode adicionar muito "| grep -i -v ^ dir /" conforme necessário.
Nota: esta não é uma duplicata. Estou lidando com uma determinada instância em que as opções do grep para excluir diretórios / caminhos não se comportam de uma maneira esperada.
Estou tentando usar o grep para pesquisar recursivamente o meu sistema de arquivos raiz. Estou tentando excluir determinados diretórios, como /proc , /sys e /usr/local . Se eu usar --exclude-dir=${DIR_NAME} , ele não pesquisará em caminhos abaixo de ${DIR_NAME} , mas isso também significa que se recusará a pesquisar caminhos abaixo de ${DIR_NAME} se ${DIR_NAME} estiver em um nível abaixo do diretório de trabalho atual. Como exemplo, considere esta árvore do sistema de arquivos:
${PWD}/
data/
settings/
sys/
users/
developer/
projects/
my_os/
build/
src/
apps/
sys/
Makefile
extras/
sys/
apps/
os/
Se eu quiser que minha pesquisa exclua ${PWD}/sys e tudo nela, grep -rl --exclude-dir=sys a excluirá, mas também excluirá ${PWD}/data/settings/sys e ${PWD}/users/developer/projects/my_os/src/sys , dois diretórios que desejo incluir na minha pesquisa.
Eu estava originalmente esperando que --exclude-dir / --exclude permitisse expressões regulares e encontrei este comentário indicando que eles fazem, mas parece que a sintaxe da expressão regular não afeta o comportamento do utilitário (por exemplo, "^/(dev|proc)" ). Eu estou bem se essas duas opções não usam expressões regulares, mas eu não quero que o padrão de exclusão seja aplicado a componentes de caminho singular. Existe alguma maneira de fazê-lo funcionar assim?
Use simplesmente isto:
grep -r "text" | grep -i -v ^sys/
Você pode adicionar muito "| grep -i -v ^ dir /" conforme necessário.
Tags grep