Extrae parte de la cadena usando grep

Extrae parte de la cadena usando grep

Tengo 3 archivos en un directorio.

MYO144064T
MYO144064TA
MYO144064TX

Donde cambiarán los dígitos y el undécimo carácter. En mi script csh, quiero extraer las letras 'A' y 'X' probablemente usando grep

La variable $estudio es igual a MYO144064

Lo que he logrado hasta ahora es muy engorroso.

ls | grep $study | cut -c 11 | sed 's/\///'

lo que me da

A
X

¿Cómo puedo hacer esto con procesos mínimos y sin líneas en blanco adicionales?

Respuesta1

ls | grep -oP "(?<=$study.)[A-Z]$"

devolverá cualquier letra mayúscula precedida por el contenido de $studymás un carácter arbitrario ( Ten su ejemplo) y seguida por el final de la línea.

La -Popción (expresiones regulares de Perl) es necesaria para poder utilizar la expresión retrospectiva positiva (?<=...), pero es posible que no esté disponible en todos los sistemas y plataformas.

Respuesta2

ls | grep $study | grep -o "[AX]$"

devuelve sólo el resultado de 'A' o 'X' como último carácter

Respuesta3

Una perlsolución:

$ perl -nle 'print chop if length == 11' file
A
X

O si puedes usar bash:

while read var
do
    [ ${#var} -eq 11 ] && echo ${var:(-1)}
done < file

información relacionada