Com POSIX grep , você só pode escolher entre imprimir a linha inteira ou não imprimir o conteúdo da linha. Se você quiser transformar a linha, você precisa usar outra ferramenta como sed ou awk. Para imprimir até a primeira ocorrência de cat
:
sed -n 's/cat.*/cat/'
awk 'sub(/cat.*/,"")'
Imprimir até a N ocorrência é mais complicado.
sed -n 's/cat/&\
/3; T; P'
awk 'gsub(/cat/,"&\n") >= 3 {split($0, a, "\n"); printf "%s%s%s\n", a[1], a[2], a[3]}'
Com GNU grep , você pode usar a opção -o
para imprimir apenas a parte correspondente da linha. Use a opção -P
para ativar a sintaxe Perl, para que os quantificadores não-vorazes estejam disponíveis.
grep -P -o '^(.*?cat){1}'
Substitua o número entre chaves pelo número n da última ocorrência de cat
a ser impresso.
Embora seja possível expressar a mesma coisa com expressões regulares estendidas ( -E
), isso requer um regexp complexo, cujo tamanho é exponencial no tamanho da parte a ser contada ( cat
here).