Se você possui o GNU grep, pode usar sua -o
opçã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 -n
e 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]