Cómo mostrar partes de texto con expresiones regulares

Cómo mostrar partes de texto con expresiones regulares

Tengo muchos archivos cuyas líneas se parecen

lotsofblah/XY##_####_morefoo

donde # es un número. Ahora quiero mostrar solo las partes.

YZ##_####

en bash, cada uno en una nueva línea, por supuesto.

Respuesta1

Suponiendo que desea que XY sean dos letras cualesquiera...

Algo como

grep -Eo "[A-Z]{2}[0-9]{2}_[0-9]{4}" file

Coincidiría con [dos letras][dos números]_[cuatro números]

Si quisieras, podría ser un poco más exacto, asegurándote de que haya un / delante y un _ después, pero este es un punto de partida.

Junte esto de man grep:

-E, --extended-regexp
          Interpret PATTERN as an extended regular expression (see below)

-o, --only-matching
          Show only the part of a matching line that matches PATTERN.

yhttp://www.regular-expressions.info/reference.html

Respuesta2

Supongo que XY e YZ son iguales y los trataré igual que XY.

egrep "XY[0-9]{2}_[0-9]{4}" filename -o

La clave es la -oopción que muestra solo el texto coincidente.

información relacionada