Se você possui o GNU grep, pode usar sua -oopção para procurar um regex e gerar apenas a parte correspondente. (Outras implementações 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 parênteses, é um pouco mais difícil; você precisa usar uma asserção de largura zero: uma regexp que corresponda à cadeia vazia, mas apenas se for precedida ou seguida, 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 o sed, você precisa desativar a impressão -ne corresponder a linha inteira e reter apenas a parte correspondente. Se houver várias correspondências possíveis em uma linha, apenas a última correspondência será impressa. Consulte Extraindo um regex correspondente a 'sed' sem imprimir os caracteres ao redor para obter mais detalhes sobre o uso de sed aqui.
sed -n 's/^.*\(\[[0-9]*\]\).*/\1/p'
ou se você deseja apenas os dígitos e não os colchetes:
sed -n 's/^.*\[\([0-9]*\)\].*/\1/p'
Sem grep -o, Perl é a ferramenta de escolha aqui, se você deseja 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ê deseja apenas os dígitos, coloque parênteses no regex para delimitar um grupo e imprima apenas esse grupo.
perl -l -ne '/\[([0-9]*)\]/ and print $1'
PS Se você deseja exigir apenas um ou mais dígitos entre colchetes, mude [0-9]*para [0-9][0-9]*, ou para [0-9]+Perl.
[number]" os meios, exceto[0-9]