como faço para escrever uma expressão regular usando grep para encontrar linhas que começam com 'O' ou 'o' AND contêm 2 caracteres consecutivos

0

como escrevo uma expressão regular usando o grep para encontrar linhas que começam com 'O' ou 'o' E contêm 2 caracteres 'c' consecutivos.

grep '^[Oo]c{2}' filename

    
por agent00uche 06.10.2015 / 23:35

2 respostas

1

Você já tem uma resposta de regex pura, mas aqui está uma resposta mais grata:

grep -i ^occ file

O -i sinaliza ao grep para fazer correspondência insensível a maiúsculas e minúsculas. É definido pelo POSIX , portanto deve estar presente em qualquer implementação do grep. Uma vez que você tenha isso, já que você só quer dois caracteres c , não há razão para complicar as coisas usando {2} ; cc é menor e mais claro. No entanto, observe que o -i se aplica a todo o reguex, então isso também corresponderá a cC ou CC ou Cc . Se você não quiser, use a abordagem @ user454038 .

Se você também precisa corresponder as linhas nas quais os c s consecutivos não estão diretamente após o o , use:

grep -i '^o.*cc' file
    
por 07.10.2015 / 00:46
5

Você estava 99% lá, muito perto, apenas:

grep '^[Oo]c\{2\}' filename

ou equivalente:

grep -E '^[Oo]c{2}' filename

Expressões regulares

  • como você sabe ^[Oo]c , o caret ^ corresponde ao início e qualquer um dos caracteres em [] é correspondido
  • você estava muito próximo de c{2} , onde pretendia corresponder ao caractere anterior c , exatamente duas vezes.
  • no entanto, grep por padrão interpreta Basic Regular Expressions, que não interpreta { como um meta-caractere para uso com esse tipo de correspondência, portanto, alteramos para \{ e \} para reconhecê-lo
  • alternativamente, você pode ativar Expressões regulares estendidas para evitar a barra invertida: grep -E '^[Oo]c{2}' filename

Se isso não corresponder, talvez copie uma amostra do conteúdo do seu teste filename que inclui o que você está tentando corresponder e atualize a pergunta para exibi-la, caso haja algo mais que tenha perdido.

    
por 06.10.2015 / 23:50