Si tiene GNU grep, puede usar su -o
opción para buscar una expresión regular y generar solo la parte correspondiente. (Otras implementaciones grep solo pueden mostrar la línea completa). Si hay varias coincidencias en una línea, se imprimen en líneas separadas.
grep -o '\[[0-9]*\]'
Si solo quieres los dígitos y no los corchetes, es un poco más difícil; debe usar una aserción de ancho cero: una expresión regular que coincida con la cadena vacía, pero solo si está precedida o seguida, según sea el caso, por un corchete. Las aserciones de ancho cero solo están disponibles en la sintaxis de Perl.
grep -P -o '(?<=\[)[0-9]*(?=\])'
Con sed, debe desactivar la impresión -n
y hacer coincidir toda la línea y conservar solo la parte correspondiente. Si hay varias coincidencias posibles en una línea, solo se imprime la última coincidencia. Consulte Extracción de una expresión regular combinada con 'sed' sin imprimir los caracteres circundantes para obtener más detalles sobre el uso de sed aquí.
sed -n 's/^.*\(\[[0-9]*\]\).*/\1/p'
o si solo quieres los dígitos y no los corchetes:
sed -n 's/^.*\[\([0-9]*\)\].*/\1/p'
Sin grep -o
, Perl es la herramienta de elección aquí si quieres algo que sea simple y comprensible. En cada línea ( -n
), si la línea contiene una coincidencia para \[[0-9]*\]
, imprima esa coincidencia ( $&
) y una nueva línea ( -l
).
perl -l -ne '/\[[0-9]*\]/ and print $&'
Si solo desea los dígitos, coloque paréntesis en la expresión regular para delimitar un grupo e imprima solo ese grupo.
perl -l -ne '/\[([0-9]*)\]/ and print $1'
PD Si solo desea requerir uno o más dígitos entre los corchetes, cambie [0-9]*
a [0-9][0-9]*
, o a [0-9]+
en Perl.
[number]
" significa excepto[0-9]