Dado
$ cat file
Good-Black-Cat
Bad-Red-Cat
Bad-Gray-Dog
Good-Golden-Dog
Bad-White-Dog
Good-Tabby-Cat
Bad-Siamese-Cat
então
$ grep -c 'Good-.*-Cat' file
2
Observe que essa é uma contagem de linhas correspondentes - por exemplo, não funcionará para várias ocorrências por linha ou para ocorrências que abranjam linhas.
Como alternativa, com awk
awk '/Good-.*-Cat/ {n++} END {print n}' file
Se você precisar corresponder várias ocorrências possíveis por linha, sugiro perl
:
perl -lne '$c += () = /Good-.*?-Cat/g }{ print $c' file
em que /Good-.*?-Cat/g
corresponde a várias vezes ( g
) e não-avidamente * ( .*?
) e a atribuição () =
força as correspondências a serem avaliadas em um contexto escalar para que pode adicioná-los à contagem.
Como alternativa, você pode usar grep
no modo de expressão regular perl-comparavel (PCRE), para habilitar o modificador não-ganancioso, com -o
para exibir apenas as partes correspondentes e depois contar com wc
:
grep -Po 'Good-.*?-Cat' file | wc -l
Se você também precisa coincidir com ocorrências que podem se estender por um limite de linha, você pode fazer isso em perl
desmarcando o separador de registro (nota: isso significa que todo o arquivo foi sugado para a memória) e adicionando o s
regex modifier eg
perl -0777 -nE '$c += () = /Good-.*?-Cat/gs }{ say $c' file