A seguinte expressão grep lista com êxito todos os arquivos .exe e .html no diretório e subdiretórios atuais.
ls -R |grep -E .*[\.exe]$\|.*[\.html]$
Como inverter este resultado para listar aqueles que não são .html ou .exe? (Ou seja !=
,.)
Use a opção de linha de comando -v
ou --invert-match
,
ls -R |grep -v -E .*[\.exe]$\|.*[\.html]$
-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
.ou
Você também pode fazer o mesmo usando
find
:Mais informações aqui .
fonte
find
comando é a solução mais semântica para esse problema XY. Combinarls
egrep
para esse fim parece, na melhor das hipóteses, hacky. Essa deve ser a resposta aceita. (+1)Adicione a
-v
opção ao seugrep
comando para inverter os resultados.fonte
fonte
Como declarado várias vezes, a inversão é obtida pela
-v
opção paragrep
. Deixe-me acrescentar a nota (que espero que seja divertida) de que você mesmo pode ter descoberto isso através dogrep
texto de ajuda:fonte