Precisa de um regex para encontrar todas as palavras que começam com uma letra e contêm duas letras

0

Eu preciso encontrar a palavra praia, como eu especificaria que ela começa com b e contém ch? Eu tentei usar o grep '^ s. * Ch', mas isso imprime linhas que o contêm e eu apenas quero a palavra.

    
por C. Medina 12.02.2017 / 21:23

2 respostas

1

O problema que você tem é que .* corresponde a qualquer sequência de caracteres (talvez omitindo nova linha) incluindo espaços.

Então você quer mudar isso para algo que corresponda apenas aos caracteres que compõem uma palavra. Como exatamente você faz isso depende de qual implementação de expressões regulares você está usando, e se você quer considerar caracteres de diferentes alfabetos. Uma maneira razoavelmente portátil é usar [[:alpha:]]*

A sintaxe a ser encontrada no início de uma palavra também depende da implementação. Para grep você pode usar \< .

Para obter apenas a palavra, há duas opções para o grep que podem ajudar, -o e --color . O primeiro apenas mostra o que é correspondido e o segundo coloca toda a linha com a partida destacada.

Então você provavelmente quer

grep -o '\<b[[:alpha:]]*ch' filename
    
por 12.02.2017 / 21:43
1
$ grep -o '\<b[a-z]*ch[a-z]*' file

Isso buscará todas as palavras que começam com b e contém ch . Os dois [a-z]* corresponderão a qualquer número de letras minúsculas. O \< garantirá que b seja a primeira letra da palavra.

A opção -o para grep fará com que ela retorne apenas a string correspondente, não a linha inteira.

Alternativa:

$ grep -o '\<b[[:lower:]]*ch[[:lower:]]*' file

Seu padrão, ^s.*ch , corresponderá a qualquer linha que comece com s e contenha ch em qualquer outro lugar na mesma linha.

    
por 12.02.2017 / 21:27