Uso sed
en lugar de grep
:
echo 12345 | sed -n '/^\([0-9]\{1,4\}\).*/s//\1/p'
Esto coincide con un máximo de 4 dígitos al principio de la línea, seguido por nada, sólo mantiene los dígitos, y los imprime. El -n
impide que las líneas se impriman de otra manera. Si la cadena de dígitos también puede aparecer en la línea media, entonces necesita un comando un poco más complejo.
De hecho, idealmente utilizará un sed
con expresiones regulares PCRE, ya que realmente necesita un partido no codicioso. Sin embargo, hasta una aproximación razonable, puede utilizar: (! Un semi-solución a un problema mucho más complejo ... ahora retirado)
Desde desea que la primera cadena de hasta 4 dígitos en el línea, simplemente utilice sed
para eliminar cualquier no-dígitos y luego imprimir la cadena de dígitos:
echo abc12345 | sed -n '/^[^0-9]*\([0-9]\{1,4\}\).*/s//\1/p'
Esto coincide con una cadena de no-dígitos seguido de 1-4 dígitos seguidos de nada, sólo mantiene los dígitos, y las impresiones ellos.
¡Esto funciona! Pero, ¿cómo realmente puedo detener grep de coincidencia después de la primera coincidencia si se encuentra? Sólo curioso. – abc
-m no detiene la coincidencia de grep después de que se encuentre la 1ra coincidencia. – abc
Al principio edité mi respuesta para incluir el indicador -m que es lo que ya tenía en su pregunta, ug. El uso de -m 1 limitará la búsqueda a solo la primera línea encontrada y la cabeza filtrará, lo que debería ser bastante bueno en la práctica. –