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.
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 -o
opción que muestra solo el texto coincidente.