Respostas:
Use a opção de linha de comando -v
ou --invert-match
,
ls -R |grep -v -E .*[\.exe]$\|.*[\.html]$
grep -v
ou
grep --invert-match
Você também pode fazer o mesmo usando find
:
find . -type f \( -iname "*" ! -iname ".exe" ! -iname ".html"\)
Mais informações aqui .
find
comando é a solução mais semântica para esse problema XY. Combinar ls
e grep
para esse fim parece, na melhor das hipóteses, hacky. Essa deve ser a resposta aceita. (+1)
Adicione a -v
opção ao seu grep
comando para inverter os resultados.
grep "subscription" | grep -v "spec"
Como declarado várias vezes, a inversão é obtida pela -v
opção para grep
. Deixe-me acrescentar a nota (que espero que seja divertida) de que você mesmo pode ter descoberto isso através do grep
texto de ajuda:
grep --help | grep invert
-v, --invert-match seleciona linhas não correspondentes
-v
/--invert-match
não necessariamente mudará se o código de retornogrep
indica uma execução bem-sucedida, mas corresponderá às linhas que de outra forma não seriam correspondidas. Aqueles que desejam inverter o código de retorno (ou seja, obter êxito se todas as linhas não corresponderem ao padrão, em vez de pelo menos um), devem usar! grep
. Isso encontra usar em expressões condicionais, por exemplo:if ! ls | grep -qE ".(\.exe)$"; then echo No .exe files in $(pwd); fi
.