Se você tiver o grep do GNU, você pode usar sua opção -o
para procurar por um regex e produzir apenas a parte correspondente. (Outras implementações do grep podem mostrar apenas a linha inteira.) Se houver várias correspondências em uma linha, elas serão impressas em linhas separadas.
grep -o '\[[0-9]*\]'
Se você quer apenas os dígitos e não os colchetes, é um pouco mais difícil; você precisa usar uma asserção de largura zero: um regexp que corresponda à string vazia, mas somente se for precedido ou seguido conforme o caso, por um colchete. As asserções de largura zero estão disponíveis apenas na sintaxe Perl.
grep -P -o '(?<=\[)[0-9]*(?=\])'
Com sed, você precisa desativar a impressão com -n
e corresponder à linha inteira e reter apenas a parte correspondente. Se houver várias correspondências possíveis em uma linha, somente a última correspondência será impressa. Consulte Como extrair um regex correspondido com 'sed' sem imprimir os caracteres adjacentes para obter mais detalhes sobre o uso do sed aqui.
sed -n 's/^.*\(\[[0-9]*\]\).*//p'
ou se você quiser apenas os dígitos e não os colchetes:
sed -n 's/^.*\[\([0-9]*\)\].*//p'
Sem grep -o
, o Perl é a ferramenta escolhida aqui se você quiser algo simples e compreensível. Em cada linha ( -n
), se a linha contiver uma correspondência para \[[0-9]*\]
, imprima essa correspondência ( $&
) e uma nova linha ( -l
).
perl -l -ne '/\[[0-9]*\]/ and print $&'
Se você quiser apenas os dígitos, coloque parênteses na expressão regular para delimitar um grupo e imprima apenas esse grupo.
perl -l -ne '/\[([0-9]*)\]/ and print $1'
P.S. Se você quiser apenas exigir um ou mais dígitos entre os colchetes, altere [0-9]*
para [0-9][0-9]*
ou para [0-9]+
em Perl.