regex - Procurando por apenas pares de caracteres

2

Eu tenho os seguintes dados a partir dos quais eu pretendo extrair apenas as linhas que contêm apenas "bb". Não "b" ou "bbb" ou qualquer outra coisa apenas "bb".

abb
abbb
aabbcc
aabab
abbbbc

Agora, quando eu uso a seguinte combinação de comandos -:

cat file1 | grep "bb[^b]

Estou obtendo a saída como todas as linhas no meu arquivo de amostra -:

abb
abbb
aabbcc
aabab
abbbbc

O esperado que eu quero é - :( As linhas que contêm apenas "bb")

abb
aabbcc

Qual é a expressão regular que pode conseguir isso?

abbbabb não é válido. Eu estou procurando por linhas que contenham apenas bb e nenhum outro padrão de b . A linha conterá apenas dois, b consecutivos e nenhum outro caractere b.

    
por Sreyan 23.11.2014 / 13:30

2 respostas

3

Acho que a maneira mais direta é:

grep '^[^b]*bb[^b]*$' file1

Btw, para comandos como grep que aceitam um argumento de nome de arquivo, é mais eficiente fazer

grep '^[^b]*bb[^b]*$' file1

ou

grep '^[^b]*bb[^b]*$' < file1

(o último funcionando se nenhum argumento de arquivo for suportado também)

do que

cat file1 | grep '^[^b]*bb[^b]*$'

e frequentemente mais flexível.

    
por 23.11.2014 / 13:39
2
grep '\(^\|[^b]\)bb\([^b]\|$\)'

ou

grep -E '(^|[^b])bb([^b]|$)'

Ou seja: procure uma ocorrência de bb precedida pelo início da linha ou por um caractere diferente de b , seguido por um caractere diferente de b ou o final de a linha.

    
por 23.11.2014 / 13:45