regex: não começa por “padrão”

4

Eu tenho um monte de linhas no meu arquivo LIST e quero listar apenas as linhas cujo nome não inicia (ou contém) "git".

Até agora eu tenho:

cat LIST | grep ^[^g]

mas gostaria de algo como:

#not starting by "git"
cat LIST | grep ^[^(git)]
#not containing "git"
cat LIST | grep .*[^(git)].*

mas não está correto. Qual regex devo usar?

    
por Vulpo 08.10.2013 / 01:04

3 respostas

14

Usando grep neste caso com a opção -P , que interpreta o PATTERN como uma expressão regular Perl

grep -P '^(?:(?!git).)*$' LIST

Explicação da expressão regular:

^             the beginning of the string
 (?:          group, but do not capture (0 or more times)
   (?!        look ahead to see if there is not:
     git      'git'
   )          end of look-ahead
   .          any character except \n
 )*           end of grouping
$             before an optional \n, and the end of the string

Usando o comando find

find . \! -iname "git*"
    
por 13.10.2013 / 11:41
3

Como o OP está procurando por um regex geral e não especialmente para o grep, este é o regex geral para as linhas que não começam com "git".

^(?!git).*

Divisão:

^ início da linha

(?!git) não seguido por "git"

.* seguido por 0 ou mais caracteres

    
por 29.01.2015 / 00:01
2

Se você quiser simplesmente listar todas as linhas que não contenham git tente isto

 cat LIST | grep -v git
    
por 08.10.2013 / 01:08

Tags